MD5 Hashing给出了C#的关键

Jar*_*red 5 c# hash md5

我一直在寻找一种方法来在使用预定密钥的C#中散列给定字符串.

在我通过互联网尝试找到一个例子的冒险中,我看到了许多MD5CryptoServiceProvider示例,这些示例似乎使用了机器的默认密钥,但没有一个应用特定密钥.我需要一个特定的密钥来编码数据,以便将其同步到其他人的服务器.我给他们一个散列字符串和一个ID号,然后他们使用它来分析数据并向我返回一个类似的集合.所以无论如何都要通过一个与两者一致的特定键来使md5散列.

我希望这可以在C#中完成,但是如果用库不可能你可以使用像php或asp这样的网络语言吗?

编辑:误解了我被抛入的场景,经过一段时间的坐着,想到为什么他们会让我使用一个键,看来他们想要一个附加在字符串末尾的键并进行哈希处理.这样,服务器可以附加它所具有的密钥以及传递的数据,以确保其是有效的访问计算机.无论如何......谢谢所有^ _ ^

编辑2:正如我在下面的评论所说,这是"盐腌"这个词我没有注意到.噢,没有方向就被抛入新事物的乐趣.

Tom*_*ter 18

MD5不是加密 - 它是一个哈希.它不允许解密字符串.

您正在寻找对称加密算法.它使用相同的密钥进行加密和解密.尝试使用加密函数而不理解它们是危险的.即使你认为你理解它们,你也会犯错误.

如果您正在将数据传输到另一个人的服务器,那么最好使用像gpg之类的东西来使用您通过电话同意的对称密钥加密文件,或者使用某些公钥加密.这样,你不会编写任何加密代码,而且它更安全(不完全安全,请注意,但更安全).


编辑:我仍在尝试破译您的要求.

MD5是一个无键的哈希函数 - 根本没有使用密钥.因此,假设服务器向您发送一个巨大的字符串,或一个文件,以及它的哈希值.然后,您将MD5字符串或文件,并将您计算的哈希值与它们发送的哈希值进行比较.如果匹配 - 数据在传输过程没有损坏.这并不意味着没有人篡改他们在途中发送给你的东西,因为MD5对它没有任何"暗示".我可以md5任何我想要的东西并发送给你.

HMAC是键控哈希函数.它有一个秘密的成分,只有你和你正在通信的小组应该知道 - 秘密密钥.如果他们向您发送长字符串或文件以及HMAC,您可以自己计算HMAC,比较您的HMAC和他们的HMAC,如果它们匹配,则数据在传输过程中没有损坏,数据也没有被篡改.