sar*_*ake 4 .net c# encryption cryptography
查看问题标题.
在坚果壳中,我想要做的是用用户提供的种子(关键字)加密一些数据.有没有办法知道数据被解密错误,换句话说种子是错的?
使用.net 2.0,C#
谢谢!
制作加密数据的哈希部分是很正常的.比如,您有一些要加密的数据.然后,您可以创建此MD5哈希,并将其添加到数据的末尾.然后,当您解密它时,您将获取加密数据末尾的哈希值并验证哈希值是否已更改.
取决于您的算法细节.流密码(如RC4)本身不会检测到任何篡改.由于块填充算法(PKCS#5),分组密码(AES)可以检测到一些篡改.此填充检查是导致ICryptoTransform.TransformFinalBlock`抛出解密失败的异常的原因,但此检测不具有加密安全性(在最坏的情况下,如果填充是一个字节,则不会检测到篡改的概率为1/256).这不是.Net实现的遗漏,是使用所有加密算法的基本问题.
因此,鉴于解密操作本身基本上不能检测篡改(或使用坏密钥/ IV),解决方案是在消息中添加消息的摘要.行业标准是使用HMAC消化,并有密钥导出过程中产生足够的关键材料,关键/ IV 和 HMAC秘密(这是怎么了TLS/SSL做到这一点,这是相当多的"行业标准",见6.3 Key calculation
的RFC链接).解密步骤解密消息,然后计算消息的HMAC,将其与原始摘要进行比较.如果它们匹配,则解密成功(使用正确的密钥/ IV)并且消息未被篡改.