1

如何将密文和IV(分组密码操作模式,例如AES-GCM)存储在文件中?如果我用对应于“:”字符的字节将它们分开,那么在读取它时,我必须将整个字节数组转换为字符串,然后将字符串拆分为由“:”分隔的块,然后再次将块转换为字节数组。有没有更简单的方法?也许一个我们确定不能作为 AES 加密和初始化向量的结果出现的字节?

当前代码(在 Java 中)是后续代码,但我不确定它是否是执行我所要求的最佳方法,即使它有效,因为我不知道表示“:”的字节是否可以出现在IV 或密文。

FileInputStream keyfis = new FileInputStream("test");
byte[] byteRead = new byte[keyfis.available()];
keyfis.read(byteRead);
keyfis.close();
String textRead=new String(byteRead); 

String[] parts = textRead.split(":");
byte[] encrAESkey=parts[0].getBytes();
byte[] myIV=parts[1].getBytes();
byte[] myencrtext=parts[2].getBytes();
4

1 回答 1

1

传统上,IV 是前置的,因为它需要恰好是一个块长度 ( 16 bytes),并且块密码模式(ECB 除外)都需要 IV(或随机数 + 计数器)。然后,您的解密代码只需从密文输入中提取第一个16 bytes并将其用作 IV,并对剩余的n - 16 bytes.

但是,您应该使用编码方案来保护您序列化到文件的密文,因为如果您写入/读取原始二进制字节,您很可能会遇到问题。十六进制或 Base64 编码是此操作的标准。

从您的代码中也可以看出,您将 AES 密钥与 IV 和密文一起存储。虽然 IV 可以与密文一起不受保护地存储,但如果不有效删除加密将提供的任何保护,密钥就无法进行。

于 2017-01-05T04:33:57.473 回答