2013-03-28 4 views
0

Я читал учебник IBM по шифрованию с использованием закрытого ключа. И я написал код нижеЧтение зашифрованных данных из файла

import java.security.*; 
import javax.crypto.*; 

// encrypt and decrypt using the DES private key algorithm 

public class PrivateExample { 

    public static void main (String[] args) throws Exception { 
    String text=new String(); 
    text="THIS IS AN ENCRYPTION TEST"; 
    byte[] plainText = text.getBytes("UTF8"); 

    // get a DES private key 
    System.out.println("\nStart generating DES key"); 
    KeyGenerator keyGen = KeyGenerator.getInstance("DES"); 
    keyGen.init(56); 
    Key key = keyGen.generateKey(); 
    System.out.println("Finish generating DES key"); 

    // get a DES cipher object and print the provider 
    Cipher cipher = Cipher.getInstance("DES/ECB/PKCS5Padding"); 
    System.out.println("\n" + cipher.getProvider().getInfo()); 
    // 
    // encrypt using the key and the plaintext 
    System.out.println("\nStart encryption"); 
    cipher.init(Cipher.ENCRYPT_MODE, key); 
    byte[] cipherText = cipher.doFinal(plainText); 
    System.out.println("Finish encryption: "); 
    System.out.println(new String(cipherText, "UTF8")); 

    // 
    // decrypt the ciphertext using the same key 
    System.out.println("\nStart decryption"); 
    cipher.init(Cipher.DECRYPT_MODE, key); 
    byte[] newPlainText = cipher.doFinal(cipherText); 
    System.out.println("Finish decryption: "); 

    System.out.println(new String(newPlainText, "UTF8")); 
    } 
} 

Приведенный выше код отлично работает. Я могу видеть результат и все такое. Но я хочу изменить его следующим образом, чтобы я мог хранить файл cipherText в файле. Затем другая программа считывает зашифрованный текст из файла и расшифровывает его. Ниже я делал до сих пор, но я не могу понять, как действовать дальше. Только небольшой намек на то, как действовать, поможет.

import java.security.*; 
import javax.crypto.*; 

// encrypt and decrypt using the DES private key algorithm 
public class PrivateExample { 

    public static void main (String[] args) throws Exception { 
    String text=new String(); 
    text="This is an encryption test"; 

    byte[] plainText = text.getBytes("UTF8"); 

    // get a DES private key 
    System.out.println("\nStart generating DES key"); 
    KeyGenerator keyGen = KeyGenerator.getInstance("DES"); 
    keyGen.init(56); 
    Key key = keyGen.generateKey(); 
    System.out.println("Finish generating DES key"); 
    // 
    // get a DES cipher object and print the provider 
    Cipher cipher = Cipher.getInstance("DES/ECB/PKCS5Padding"); 
    System.out.println("\n" + cipher.getProvider().getInfo()); 
    // 
    // encrypt using the key and the plaintext 
    System.out.println("\nStart encryption"); 
    cipher.init(Cipher.ENCRYPT_MODE, key); 
    byte[] cipherText = cipher.doFinal(plainText); 
    System.out.println("Finish encryption: "); 
    System.out.println(new String(cipherText, "UTF8")); 

    //Now writing to an ouput file the cipherText 
    try{ 
     FileOutputStream fs=new FileOutputStream("c:/test.txt"); 
     fs.write(cipherText); 
    }catch(Exception e){ 
     e.printStackTrace(); 
    } 
//How to proceed from here 

} 
} 

Теперь эта работа выполнена. Он успешно написал зашифрованную строку в файл. Новая программа должна только расшифровать данные. Как читать зашифрованные байты из файла? Новая программа, очевидно, не знает, что такое исходная строка, но я буду использовать тот же ключ, что и в алгоритме. Пожалуйста помоги! Я новичок в шифрования

+0

Вам нужно просто прочитать его из файла? –

+0

Сохраните ключ в файле и используйте его для расшифровки. – user1516873

+2

'key' будет очень закрытым, если вы не сохраните его до конца программы. – Anthon

ответ

2

Вот как вы пишете свой ключ в файл:

 //Write your key to an output file. 
     byte[] keyAsByte = key.getEncoded(); 
     FileOutputStream keyfos = new FileOutputStream("key.txt"); 
     keyfos.write(keyAsByte); 
     keyfos.close(); 

Я не рекомендовал бы поставить ключ с зашифрованным текстом в том же файле.

Вот как вы читаете ecrypted текст и ключ обратно и дешифрования:

//Read your key 
    FileInputStream keyFis = new FileInputStream("key.txt"); 
    byte[] encKey = new byte[keyFis.available()]; 
    keyFis.read(encKey); 
    keyFis.close(); 
    Key keyFromFile = new SecretKeySpec(encKey, "DES"); 
    //Read your text 
    FileInputStream encryptedTextFis = new FileInputStream("test.txt"); 
    byte[] encText = new byte[encryptedTextFis.available()]; 
    encryptedTextFis.read(encText); 
    encryptedTextFis.close(); 
    //Decrypt 
    Cipher decrypter = Cipher.getInstance("DES/ECB/PKCS5Padding"); 
    decrypter.init(Cipher.DECRYPT_MODE, keyFromFile); 
    byte[] decryptedText = decrypter.doFinal(encText); 
    //Print result 
    System.out.println("Decrypted Text: " + new String(decryptedText)); 

Примечание: Я не использовал тот же путь, как и вы для записи информации.

+0

Большое спасибо за помощь –

+0

Есть еще одно сомнение. После прочтения значений также добавляется дополнение. Есть ли способ легко удалить прокладку? –

+0

Заполнение расшифрованного текста? – nattyddubbs

Смежные вопросы