1
安全に生成された16バイトのIVを暗号化された後、書き込まれる前に各ファイルに追加しようとしています。これは、IVをファイルから引っ張って後で解読できるようにするためです。これまでのコードです:暗号化されたファイルにIVを後で復号化するために追加する
public static void encrypt(byte[] file, String password, String fileName, String dir)
throws Exception {
SecureRandom r = new SecureRandom();
//128 bit IV generated for each file
byte[] iv = new byte[IV_LENGTH];
r.nextBytes(iv);
SecretKeySpec keySpec = new SecretKeySpec(password.getBytes(), "AES");
IvParameterSpec ivspec = new IvParameterSpec(iv);
Cipher cipher = Cipher.getInstance("AES/CBC/NoPadding");
cipher.init(Cipher.ENCRYPT_MODE, keySpec, ivspec);
FileOutputStream fos = new FileOutputStream(dir + fileName);
CipherOutputStream cos = new CipherOutputStream(fos, cipher);
// Have to append IV --------
cos.write(file);
fos.flush();
cos.flush();
cos.close();
fos.close();
これはどのように行うべきですか?
私はこれに多くの経験はありませんが、このようにすればIVがファイルで暗号化されませんか?もしそうなら、私はどのように暗号化されたIVを使ってファイルを解読するのですか? – champskee
CipherOutputStreamはFileOutputStreamの上で動作し、どちらもシーケンシャルです。 FileOutputStreamに何かを書き込んでからCipherOutputStreamをアタッチすると、何が書き込まれたのか分かりません。逆も同様です。したがって、FileInputStreamをインスタンス化し、そこから16バイトを読み取り、キーとIVからCipherオブジェクトを作成し、CipherInputStreamをFileInputStreamにアタッチします。 –
ありがとうございます。大変感謝しています! – champskee