C# MD5 哈希需要匹配 PHP MD5 哈希(带盐)

标签 c# php hash salt

我有一个字符串,需要在 C# 中使用盐进行哈希处理,并与 PHP 中的情况相匹配。 C#代码如下:

        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 代码是:

<?php echo md5('123'.'321'); ?>

C# 输出正确的 UNSALTED MD5 哈希值,即 202cb962ac59075b964b07152d234b70。但是,当我尝试使用 C# 进行加盐时,我得到 900011ae860f471561023fba6cc25df6,而使用 PHP 进行加盐时,我得到 c8837b23ff8aaa8a2dde915473ce0991。

我不确定为什么要这样做,或者这是否是正确的方法。要记住的是 C# 需要输出到 PHP 输出到的内容。

最佳答案

C# 代码使用了比 PHP 代码更好的加盐机制。要匹配 PHP,您所需要做的就是在 stringToHash + saltToUse 上运行 MD5,而不是使用 HMACMD5 的关键功能。简而言之,完全按照您在 C# 中生成未加盐 MD5 的操作,但改为传入 stringToHash + saltToUse

关于C# MD5 哈希需要匹配 PHP MD5 哈希(带盐),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18451182/

相关文章:

c# - 如何从键盘读取 "Enter"退出程序

c# - Entity Framework + ASP.NET Identity + Repository Pattern - 如何在加载用户的同时加载角色

php - 使用正则表达式捕获 html 标签内的内容

c# - 如何将图像添加到我的 .resx 文件中?

c# - 结束对话 C# 机器人

php - 打开数据库记录时,不允许其他用户更改记录(PHP+MySQL)

php - fuelphp属于关系,不同机型

c++ - 整数散列问题

php - 用于 PHP 的 libsodium 无法正常工作

database - 如何使用 perl 将数据库的每一行保存为目录中的单独数据 block 文件?