PHP和C#中的不同MD5哈希值

为什么在更改输入字符串时哈希变得不同?</ p>

我的C#代码 是:</ p>

  public static string CreateMD5(string strInput)
{
using(MD5 md5 = MD5.Create())
{
byte [] inputBytes = Encoding.UTF8.GetBytes(strInput);
byte [] hashBytes = md5.ComputeHash(inputBytes);

string hashedString = BitConverter.ToString(hashBytes).Replace(“ - ”,“”)。ToLower() ;
返回hashedString;
}
}
</ code> </ pre>

在PHP中,我使用 md5()</ code>函数。 这是一个在线服务,所以我没有源代码; 我只是使用该网站来匹配结果。</ p>

如果我有这个字符串:</ p>

  test-server :: 7250406f7c43524545f794ff50dfd15b 
</ 代码> </ pre>

哈希值相同: 20202421c846813960404af7dd36c146 </ code>。 但是,如果我将字符串扩展到此(带编码字符):</ p>

  test-server :: 7250406f7c43524545f794ff50dfd15b :: name =%D0%98%D0%BD%D0%B5  %D1%81%D1%81%D0%B0 
</ code> </ pre>

现在哈希值不同: 3db825e09eae0a83db535fda7f5ee5b5 </ code>和 ee1ae334e4bdeceb54caab15555f2f40 </ code >。</ p>

为什么会发生这种情况?</ p>
</ div>

展开原文

原文

Why hashes become different if i change input string?

My C# code is:

public static string CreateMD5(string strInput)
    {
        using (MD5 md5 = MD5.Create())
        {
            byte[] inputBytes = Encoding.UTF8.GetBytes(strInput);
            byte[] hashBytes = md5.ComputeHash(inputBytes);

            string hashedString = BitConverter.ToString(hashBytes).Replace("-", "").ToLower();
            return hashedString;
        }
    }

In PHP I use the md5() function. It is an online service so I have no source code; I just use that website to match results.

If I have this string:

test-server::7250406f7c43524545f794ff50dfd15b

Hashes are the same: 20202421c846813960404af7dd36c146. But if I extend the string to this (with encoded characters):

test-server::7250406f7c43524545f794ff50dfd15b::name=%D0%98%D0%BD%D0%B5%D1%81%D1%81%D0%B0

Now hashes are different: 3db825e09eae0a83db535fda7f5ee5b5 and ee1ae334e4bdeceb54caab15555f2f40.

Why this happening?

dongshungai4857
dongshungai4857 是的@Joey你是对的,这里的意图只是尝试识别php中使用的编码,因为没有提供代码
2 年多之前 回复
dpjs2005
dpjs2005 朋友不要让朋友使用md5。它已被弃用了20年,但不知何故,这种非常不安全的哈希不会死。
2 年多之前 回复
doukan3504
doukan3504 ASCII是一个非常糟糕的选择,因为非ASCIIUnicode的所有内容都将被转换为?
2 年多之前 回复
dsstjqsr631426
dsstjqsr631426 似乎各种在线编码器给出不同的哈希结果。刚检查了一些。
2 年多之前 回复
dongyinzheng6572
dongyinzheng6572 至于你的上次编辑。看起来在线服务给你错误的哈希......很可能是因为RicardoPontual所述的编码问题
2 年多之前 回复
dongtidai6519
dongtidai6519 通过简单地看一下这个md5在线编码器,看起来第一个哈希是正确的哈希。(正如旁注)
2 年多之前 回复
dou72260
dou72260 问题是编码,你在C#和PHP中使用相同的吗?你尝试过ASCII而不是UTF8吗?
2 年多之前 回复
dongquanyu5816
dongquanyu5816 你昨天没有问这个问题吗?
2 年多之前 回复
douhao8456
douhao8456 向我们展示PHP代码。
2 年多之前 回复

1个回答



哈希值 ee1ae334e4bdeceb54caab15555f2f40 </ code>是 test-server :: 7250406f7c43524545f794ff50dfd15b :: name上的MD5哈希值 =Инесса</代码>。 此输入是 test-server :: 7250406f7c43524545f794ff50dfd15b :: name =%D0%98%D0%BD%D0%B5%D1%81%D1%81%D0%B0 </ code>的URL解码版本 。</ p>

您的C#代码片段在未解码的版本上执行MD5。 PHP默认解码 GET </ code>,因此为了获得相同的结果,您需要对设置为PHP脚本的值进行双重编码。</ p>

请参见此处, https://3v4l.org/rK7fi (在线PHP代码实现):</ p>


GET变量通过urldecode()传递。</ p>
</ blockquote>

http://php.net/manual/en/reserved.variables.get.php </ p>

或者 如果您在对C#中的值进行URL编码之前对MD5值进行编码,则系统应返回相同的哈希值。</ p>
</ div>

展开原文

原文

The hash value ee1ae334e4bdeceb54caab15555f2f40 is the MD5 hash over test-server::7250406f7c43524545f794ff50dfd15b::name=Инесса. This input is the URL-decoded version of test-server::7250406f7c43524545f794ff50dfd15b::name=%D0%98%D0%BD%D0%B5%D1%81%D1%81%D0%B0.

Your C# code fragment performs MD5 on the non-decoded version. PHP decodes GETs by default so to get the same result you will need to double encode the value being set to the PHP script.

See here, https://3v4l.org/rK7fi (online PHP code implementation):

The GET variables are passed through urldecode().

http://php.net/manual/en/reserved.variables.get.php

Alternatively if you MD5 the value before you URL encode the values in the C# the systems should return the same hash.

dswm97353
dswm97353 小注:请仅使用(内联)代码片段来实际代码,输入,输出和错误等。 不要用它来突出显示“C#”或类似的单词。 如果你想强调任何使用斜体或粗体 - 但请谨慎。
2 年多之前 回复
doubeizhong5178
doubeizhong5178 我猜它不是真正的双重编码,它只是第二次编码部分编码的字符串(例如名称=也应该是名称%3D。),所以当它到达PHP时,它被编码并按预期解码。 是的,而不是MD5的URL编码值是一个更好的计划。
2 年多之前 回复
douyongdao4046
douyongdao4046 对我来说,在C#中对字符串进行URL解码比在PHP中对其进行双重编码似乎更好。 您选择双重编码的原因是什么?
2 年多之前 回复
duanqi6007
duanqi6007 你可能想要添加他的数据的解码版本是test-server :: 7250406f7c43524545f794ff50dfd15b :: name =Ð~нÐμÑÑа
2 年多之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问
相关内容推荐