And*_*man 3 c# cryptography aes salt
我有一段时间没有写加密了,忘记了一些东西。
我记得为了让使用相同密钥的相同数据的输出不同,我想在字节数组的一端对数据加盐,然后使用 CBC 模式,以便盐可以发挥作用。
但是我不记得加密的方向。盐应该放在位置0,然后要加密的数据放在它后面,还是盐放在最后?我知道当盐是链中的第一个块时,CBC 模式效果最好。
另外,AES 256 的块大小是多少?wiki 文章说所有 AES 都使用 128 位块大小,并且 256 部分仅与密钥长度相关。那么 AES 256 的盐应该是 16 字节还是 32 字节?
我使用的是 AesCryptoServiceProvider,而不是 RijndaelManaged。
首先,在分组密码的上下文中,我们通常将随机每次加密值初始化向量(IV)称为“盐”。
AES-256 有 128 位块,因此 IV 应该有 128 位。实现 CBC 模式的典型库有一个特殊的 IV 参数。您不应该自己将其混合到明文中。
AesCryptoServiceProvider实例化时默认创建一个新的随机 IV。您只需将其与密文一起存储并在解密之前将其恢复即可。由于您需要 IV 来开始解密,因此我更喜欢将其放在密文的开头。但 IV 的存储方式和位置对安全性没有影响。
除了您的问题之外的附加提示:在密文上添加 MAC(例如 HMAC-SHA-2)。请务必在包括 IV 的密文(先加密后加密)上进行计算,而不是在明文上进行计算(先加密后加密)。否则,主动攻击者通常可以使用填充预言机来解密消息。不要忘记使用恒定时间比较函数进行 MAC 验证。
| 归档时间: |
|
| 查看次数: |
10411 次 |
| 最近记录: |