【发布时间】:2011-09-12 20:08:33
【问题描述】:
我试图在工作中验证文件的完整性并且遇到了困难。我不太精通加密和散列,所以请耐心等待。
我有一些文件的末尾有一个 MD5 哈希。我编写了代码来获取我认为是散列的字节,它们的长度一致为 128 字节。在文件中,就在散列之前,是关键字“RSA1024”,我认为这意味着散列是使用 RSA 1024 加密的。
我知道文件中的 RSA 密钥,并且已经读出了字节(总是 258 字节长)。我看过很多使用 FromXmlString() 来获取密钥的教程,但是这个 RSA 密钥不是使用 .net 框架生成的,也不是 XML 格式的。
我编写了以下方法来使用密钥解密哈希数据,并且在执行 ImportCspBlob() 时抛出此错误 - System.Security.Cryptography.CryptographicException: Bad Version of provider。
有什么想法吗?
public byte[] DecryptRSA(byte[] encryptedData, byte[] keyData)
{
CspParameters param = new CspParameters();
param.Flags = CspProviderFlags.UseExistingKey;
RSACryptoServiceProvider rsaProvider = new RSACryptoServiceProvider(param);
rsaProvider.ImportCspBlob(keyData);
byte[] decryptedData = rsaProvider.Decrypt(encryptedData, false);
return decryptedData;
}
基本算法
想要“解密 MD5 哈希” 听起来可能很奇怪,尤其是当有人说他们想要“用公钥解密”时。但这就是数字签名的工作方式。使用 RSA,您可以:
- 用私钥加密
- 解密使用公钥
消息摘要使用私钥加密,然后只能使用公钥密钥解密。这样你就知道只有拥有私钥的人才能签署消息。
【问题讨论】:
-
您知道,您不能“取消哈希”或“解密”哈希码。散列是一种单向操作。也就是说,我相信您的问题实际上是关于解密的,而散列这个词只是被滥用了!仅供参考
-
澄清一下 - 该文件已使用 MD5 进行哈希处理,然后使用 RSA1024 加密 MD5 结果并将结果附加到文件中?
-
您无法解密/去散列 MD5。 MD5 algorithm 是单向的。
-
你和this questioner是同一个人吗?
-
对不起,凯维克。也许我不够清楚。我不想解密哈希,我知道这是做不到的。我想解密加密哈希的结果,也就是文件末尾存储的内容。
标签: c# md5 rsa encryption