问题的标题已经说明了。
简而言之,我想用用户提供的种子(关键字)加密一些数据。有没有办法知道数据被错误解密,或者换句话说,种子是错误的?
使用 .net 2.0,C#。
谢谢!
问题的标题已经说明了。
简而言之,我想用用户提供的种子(关键字)加密一些数据。有没有办法知道数据被错误解密,或者换句话说,种子是错误的?
使用 .net 2.0,C#。
谢谢!
将哈希值作为加密数据的一部分是非常正常的。比如,你有一些需要加密的数据。你可以创建这些数据的MD5哈希值,并将其添加到数据的末尾。然后,在解密时,你可以获取加密数据末尾的哈希值,并验证哈希值是否发生了变化。
Key calculation
)。解密步骤解密消息,然后计算消息的 HMAC,将其与原始摘要进行比较。如果它们匹配,则解密成功(使用了正确的密钥/IV)并且消息没有被篡改。如果您想防止消息被篡改,请使用HMAC。
常规加密不会篡改证明消息。从asp.net团队的错误中吸取教训,并进行额外的验证 - 参见asp.net填充Oracle漏洞如何与获取不同级别的访问权限相关。
如果您不进行额外的验证,很可能会暴露攻击者可能用来尝试操纵系统的信息。
解决该问题的正式方法是在密钥周围使用key wrap(本身也应加密)。这是因为您只应相信完全私有的密钥,而不是给您的密钥。如果您使用无效的密钥加密数据,则事情会变得糟糕。
在.NET中,没有内置例程(据我所知)来执行密钥包装,但实质上,您可以通过以16个(或任何块大小)'A'字符的字符串作为前缀和后缀来实现相同的效果。当您解密密钥时,请确保其已预先和后缀为'A',如果没有,则标记为错误。
如果您的要求不那么正式,则另一个选项是使用密钥解密一个已知使用正确密钥加密的字符串。如果解密该字符串后得到意外结果,则将其标记为错误。