密文和其他数据的分隔符

时间:2016-12-13 09:33:09

标签: byte separator aes-gcm initialization-vector

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

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

__gc

1 个答案:

答案 0 :(得分:1)

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

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

您的代码中还会显示您将AES密钥与IV和密文一起存储。虽然IV可以与密文一起不受保护地存储,但密钥不能,而不会有效地删除加密所提供的任何保护。