1

我试图在加密之后但在写入之前将一个 16 字节的安全生成的 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();

关于如何做到这一点的任何建议?

4

1 回答 1

1
FileOutputStream fos = new FileOutputStream(dir + fileName);
fos.write(iv);

CipherOutputStream cos = new CipherOutputStream(fos, cipher);

应该做的伎俩。甚至可以在设置密码之前将 IV 写入文件。

于 2017-02-22T21:55:12.930 回答