首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >C# MD5散列需要匹配MD5散列(使用salt)

C# MD5散列需要匹配MD5散列(使用salt)
EN

Stack Overflow用户
提问于 2013-08-26 19:04:40
回答 2查看 1.3K关注 0票数 2

我有一个字符串,需要在C#中使用salt进行散列,并与它在PHP中匹配。C#代码如下:

代码语言:javascript
复制
        string stringToHash = "123";
        string saltToUse = "321";
        byte[] stringBytes = ASCIIEncoding.ASCII.GetBytes(stringToHash);
        byte[] saltBytes = ASCIIEncoding.ASCII.GetBytes(saltToUse);

        var hmacMD5 = new HMACMD5(saltBytes);
        var saltedHash = hmacMD5.ComputeHash(stringBytes);
        byte[] hashedBytesNoSalt = MD5CryptoServiceProvider.Create().ComputeHash(stringBytes);

        string hashedString = BitConverter.ToString(hashedBytesNoSalt).Replace("-", "").ToLower();
        string saltedString = BitConverter.ToString(saltedHash).Replace("-", "").ToLower();

要测试C#是否正确输出的PHP代码是:

代码语言:javascript
复制
<?php echo md5('123'.'321'); ?>

C#输出正确的未咸MD5散列,即202cb962ac59075b964b07152d234b70。但是,当我尝试使用C#进行食盐时,我得到了900011ae860f471561023fba6cc25df6,而使用c8837b23ff8aaa8a2dde915473ce0991我得到了c8837b23ff8aaa8a2dde915473ce0991。

我不知道它为什么要这样做,也不知道这是否正确。需要记住的是,C#需要输出到PHP输出的内容。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-08-26 19:15:22

盐和私钥不是一回事。HMACMD5使用私钥,当您只想要一个咸的MD5散列时。只需将盐附加到字符串以生成正确的密钥..。stringToHash + saltToUse

在这里阅读HMACMD5http://msdn.microsoft.com/en-us/library/yd9e7dt2.aspx

票数 1
EN

Stack Overflow用户

发布于 2013-08-26 19:12:10

C#代码使用了比PHP更好的咸化机制。要匹配PHP,只需在MD5上运行stringToHash + saltToUse,而不是使用HMACMD5 5的关键特性。简而言之,完全按照您在C#中生成未腌制的C#所做的那样做,而是传递给stringToHash + saltToUse

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18451182

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档