据我所知,解密AES-256-CBC加密字符串需要一个秘密密钥(与CBC块大小相同的长度)和一个初始化向量(IV)。由于IV应该是随机的,因此它与加密文本一起以明文分发。
是否有标准或至少“常用”格式来格式化结果?
例如,/usr/bin/openssl似乎连接了"Salted___“+ IV +密码文本,然后base64对所有内容进行编码。这会是一种推荐的方式吗?我想存储加密的文本,但仍然能够用任何PHP/Python/Java库在10年内解密它。
发布于 2015-08-12 14:15:40
是否有标准或至少“常用”格式来格式化结果?
PKCS #7 (和CMS是进一步的发展)描述了加密数据的标准格式。虽然它主要用于公钥加密的数据,但它也有对称密钥的选项。但是,由于它所支持的所有特性,它是相当复杂的,因此,除非您能够找到一个为您完成所有编码和解析的库,否则如果您只需要自己使用的格式,您可能希望做一些更简单的事情。
另一种可能非常常用的“格式”是简单地连接IV和加密消息(如果适用的话,还可以连接MAC )。然而,这并不是很容易发现的。
例如,/usr/bin/openssl似乎连接了"Salted___“+ IV +密码文本,然后base64对所有内容进行编码。这会是一种推荐的方式吗?
实际上,OpenSSL中的"Salted___“表示基于密码的加密,后面的值不是用于密码的IV,而是用于从密码派生密钥和IV的salt。如果您直接使用的是密钥,而不是密码,则不应该重用该格式,否则只会造成混淆。
我想存储加密的文本,但仍然能够用任何PHP/Python/Java库在10年内解密它。
除了PKCS #7或CMS之外,我建议只使用普通的ASCII来描述格式、密码和模式,然后连接二进制IV +数据。它会扩展数据,但是空间如果通常很便宜的话,ASCII将永远是可读的。
https://crypto.stackexchange.com/questions/27444
复制相似问题