Как хранить secretKey и IV в одном файле для шифрования и дешифрования AES с использованием Java? - PullRequest
0 голосов
/ 13 февраля 2019

Я должен зашифровать мой файл, используя шифр AES-256 с ключом AES 256 и 16-байтовым IV, и я хочу сохранить ключ и IV в одном файле и повторно использовать его для расшифровки.Но в настоящее время я могу сохранить его индивидуально.Может ли кто-нибудь помочь нам, как хранить ключ и IV в одном файле.

вот мой код

SecureRandom srandom = new SecureRandom();
      byte[] iv = new byte[16];
      srandom.nextBytes(iv);
      IvParameterSpec ivspec = new IvParameterSpec(iv);   
      FileOutputStream ivOutFile = new FileOutputStream("C:\\iv.key");
      ivOutFile.write(iv);
      ivOutFile.close();     
      KeyGenerator kgen = KeyGenerator.getInstance("AES");
      kgen.init(256);
      SecretKey skey = kgen.generateKey();
      FileOutputStream out = new FileOutputStream("C:\\AES.key");
      byte[] keyb = skey.getEncoded();
      out.write(keyb);
      out.close(); 
 Cipher ci = Cipher.getInstance("AES/CBC/PKCS5Padding");
          ci.init(Cipher.ENCRYPT_MODE, skey, ivspec);
          FileEncryptionUtils fileEncryptionUtils =new FileEncryptionUtils();
          fileEncryptionUtils.processFile(ci, inFile, outFile);

Ответы [ 2 ]

0 голосов
/ 15 февраля 2019
I found a way to store in one file and used that file for decryption and its working. here is my approach
 while writing IV and key in 2 different files, i have written in one file. And for Decryption i read the file like first 16bytes for IV and  last 32 bytes for secretkey. 


FileOutputStream OutFile = new FileOutputStream("C:\\SecretFile.key");
      OutFile.write(iv); 
      KeyGenerator kgen = KeyGenerator.getInstance("AES");
      kgen.init(256);
      SecretKey skey = kgen.generateKey();
      byte[] keyb = skey.getEncoded();
      OutFile.write(keyb);
      OutFile.close(); 
0 голосов
/ 13 февраля 2019

Ваш подход к использованию IV неверен.IV не являются секретом и не должны использоваться повторно.Создавайте новый каждый раз, когда вы шифруете, и просто сохраняйте его вместе с зашифрованным текстом, а не с ключом!

См. Примеры в этом хранилище , где приведены рекомендации по симметричному шифрованию.

...