MD5哈希鉴于C#中的关键(MD5 Hashing Given a Key in C#)

2019-09-17 18:20发布

我一直在寻找一种方式来散列在C#中给定的字符串使用预定的关键。

在我的冒险通过互联网试图找到适用的特定键一个例子,我已经看到了很多例子MD5CryptoServiceProvider这似乎使用的机器默认的关键,但他们没有。 我需要有一个特定的密钥对数据进行编码,以它同步到别人的服务器。 我递给他们一个散列字符串和一个ID号和它们使用的分析数据并返回一组类似的给我。 所以,反正是有得到的MD5通过特定的按键,这将是双方一致的哈希值。

我宁愿这在C#中完成,但如果它无法与您可以用一些网络语言如PHP或ASP这样做的图书馆?

编辑:我误会被扔进和一点点休息后,思考他们为什么要我用他们似乎要附加到字符串和散列结束的关键的关键场景。 这样,服务器可以追加关键它一起传递,以确保其有效访问计算机中的数据。 反正...感谢所有的^ _ ^

EDIT2:如下我的评论说,这是术语“盐析”我是浑然不觉。 乘车路线扔进没有方向新的东西哦乐趣。

Answer 1:

MD5是加密不 - 这是一个哈希值。 它不允许一个字符串进行解密。

您正在寻找一个对称加密算法。 它使用相同的密钥来加密和解密。 尝试使用加密功能的不理解他们是很危险的 。 即使你认为你了解他们,你可以犯了一个错误。

如果你将数据传输到另一个人的服务器,你可以用喜欢的东西会更好GPG使用对称密钥你们都同意通过电话, 或者一些公共密钥加密文件进行加密。 这样一来,你不写任何加密代码,它的安全(不是完全安全的,你要知道,但更安全)。


编辑:我仍然在试图破译你的要求。

MD5是无锁的哈希函数 - 有在使用中没有键入的。 所以我们可以说服务器发送你一个巨大的字符串,或一个文件,它的哈希值。 这样,你会MD5的字符串或文件,并把你比他们所发送的散列计算哈希值。 如果它们匹配-数据中没有被破坏 。 这并不意味着没有人与他们送你在运输过程中被篡改,因为MD5没有“秘密武器”来了。 我可以MD5任何我想要的,并传送给你。

一个HMAC是一个加密散列函数 。 它有一个秘方,只有你和你与之通信的组应该知道 - 密钥。 如果他们给你很长的字符串或文件,和HMAC,你可以自己计算HMAC,比较你的HMAC和他们,如果他们匹配, 数据中没有被破坏,也没有被篡改了的数据



Answer 2:

MD5是散列函数,并严格来说,不是用来“加密”的字符串。 它产生被用作一种指纹的用于将输入串128位“消息文摘”(因此在名称中MD)。



Answer 3:

汤姆的权利:MD5只是一个单向散列,你不能解密。 请点击以下链接:

  • 在C#对称密钥加密
  • 公钥RSA加密在C#


Answer 4:

您可以使用AES从C#做的加密你正在寻找的类型。 这里的一篇文章如何。



Answer 5:

您应该使用从继承的一个类SymmetricAlgorithm ,例如:

  • AesCryptoServiceProvider
  • DESCryptoServiceProvider
  • RC2CryptoServiceProvider
  • TripleDESCryptoServiceProvider


Answer 6:

那么,为什么下面的测试失败,如果两个输入字符串相同?

    [TestMethod]
    public void MD5HashTest()
    {
        var hash1 = (new MD5CryptoServiceProvider()).ComputeHash(new System.Text.ASCIIEncoding().GetBytes("now is the time for all good men."));
        var hash2 = (new MD5CryptoServiceProvider()).ComputeHash(new System.Text.ASCIIEncoding().GetBytes("now is the time for all good men."));

        Assert.AreEqual(hash1, hash2);
    }


文章来源: MD5 Hashing Given a Key in C#
标签: c# md5 hash