后台:我为AES加密/解密编写了一对.NET函数。
我希望将带有密文的IV存储在单个base64编码的字符串中,类似于described here。
我见过散列this example,他将salt字节附加到散列字节的末尾,然后base64对新数组进行编码。然后,在验证散列时,他解码base64字符串,并拆分salt和hash字节。
我的问题是:是否有定义的标准描述了我应该如何执行连接,以便可以解析我的base64编码数据&其他程序解密?或者,作为程序员,我可以根据自己的需要编写加密/解密函数来解析数据吗?
标准将回答以下问题:我是否将IV字节前置或附加到密文字节?
我理想的函数签名如下:
// returns base64encodedCiphertextAndIV
string encrypt(string plaintext, string base64encodedKey)
// returns plaintext
string decrypt(string base64encodedCiphertextAndIV, string base64encodedKey)
答案 0 :(得分:2)
将IV添加到密文的前面是非常好的,而且非常标准。 IV不必保密,只有钥匙必须保密。如果您使用CTR模式,那么IV在给定密钥中是唯一的非常重要。如果您使用CBC模式,那么拥有独特的IV是有用的,但不是那么重要。