php md5 算法给出与 c# 相同的结果

发布于 2024-07-18 02:42:14 字数 784 浏览 4 评论 0原文

我在 C# 中有一个哈希算法,简而言之,它是:

string input = "asd";

System.Security.Cryptography.MD5 alg = System.Security.Cryptography.MD5.Create();
System.Text.UTF8Encoding enc = new System.Text.UTF8Encoding();


byte[] hash = alg.ComputeHash(enc.GetBytes(input));
string output = Convert.ToBase64String(hash);

// outputs:   eBVpbsvxyW5olLd5RW0zDg==
Console.WriteLine(output);

现在我需要在 php 中复制此行为,

$input = "asd";
$output = HashSomething($input);
echo $output;

我怎样才能实现它?

我检查了

  • md5
  • utf8_decode
  • utf8_encode
  • base64_encode
  • base64_decode
  • url_decode

但我注意到 php md5 最后没有得到 == ...我错过了什么?

注意:我无法更改 C# 行为,因为它已经实现,并且密码已使用此算法保存在我的数据库中。

i have a hashing algorithm in C#, in a nutshell, it is:

string input = "asd";

System.Security.Cryptography.MD5 alg = System.Security.Cryptography.MD5.Create();
System.Text.UTF8Encoding enc = new System.Text.UTF8Encoding();


byte[] hash = alg.ComputeHash(enc.GetBytes(input));
string output = Convert.ToBase64String(hash);

// outputs:   eBVpbsvxyW5olLd5RW0zDg==
Console.WriteLine(output);

Now I need to replicate this behaviour in php,

$input = "asd";
$output = HashSomething($input);
echo $output;

How can I achieve it?

I checked

  • md5
  • utf8_decode
  • utf8_encode
  • base64_encode
  • base64_decode
  • url_decode

but i noted the php md5 doesn't get the == on the end... what am I missing?

NOTE: I cannot change C# behaviour because it's already implemented and passwords saved in my db with this algorithm.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(6

め七分饶幸 2024-07-25 02:42:14

问题是 PHP 的 md5() 函数默认返回哈希的十六进制变体,其中 C# 返回原始字节输出,然后必须使用 Base64 编码使其成为文本安全的。 如果您运行的是 PHP5,则可以使用 base64_encode(md5('asd', true))。 请注意,md5() 的第二个参数为 true,这使得 md5() 返回原始字节而不是十六进制。

The issue is PHP's md5() function by default returns the hex variation of the hash where C# is returning the raw byte output that must then be made text safe with base64 encoding. If you are running PHP5 you can use base64_encode(md5('asd', true)). Notice the second parameter to md5() is true which makes md5() return the raw bytes instead of the hex.

乜一 2024-07-25 02:42:14

你还记得在 php 中对 md5 哈希值进行 Base64 编码吗?

$result = base64_encode(md5($password, true));

第二个参数使 md5 返回原始输出,这与您在 C# 中使用的函数相同

Did you remember to base64 encode the md5 hash in php?

$result = base64_encode(md5($password, true));

The second parameter makes md5 return raw output, which is the same as the functions you're using in C#

扮仙女 2024-07-25 02:42:14

您的 C# 代码从字符串中获取 UTF8 字节; 计算 md5 并存储为 base64 编码。 所以你应该在 php 中做同样的事情,应该是:

$hashValue = base64_encode(md5(utf8_decode($inputString)))

Your C# code takes the UTF8 bytes from the string; calculates md5 and stores as base64 encoded. So you should do the same in php, which should be:

$hashValue = base64_encode(md5(utf8_decode($inputString)))
雾里花 2024-07-25 02:42:14

php 应该如下所示

 php -r "echo base64_encode(md5(utf8_encode('asd'),true));"

it should be like as below for php

 php -r "echo base64_encode(md5(utf8_encode('asd'),true));"
顾北清歌寒 2024-07-25 02:42:14

我遇到了同样的问题...仅使用 md5($myvar) 就可以了。 我得到了与 C# 和 PHP 相同的结果。

I had the same issue...using just md5($myvar) it worked. I am getting the same result C# and PHP.

苏辞 2024-07-25 02:42:14

加文·肯德尔的帖子帮助了我。 我希望这对其他人有帮助。

http://jachman.wordpress.com/2006/ 06/06/md5-hash-keys-with-c/

public static string MD5Hash(string text)
{
    System.Security.Cryptography.MD5 md5 = new System.Security.Cryptography.MD5CryptoServiceProvider();
    return System.Text.RegularExpressions.Regex.Replace(BitConverter.ToString(md5.ComputeHash(ASCIIEncoding.Default.GetBytes(text))), “-”, “”);
}

Gavin Kendall posted helped me. I hope this helps others.

http://jachman.wordpress.com/2006/06/06/md5-hash-keys-with-c/

public static string MD5Hash(string text)
{
    System.Security.Cryptography.MD5 md5 = new System.Security.Cryptography.MD5CryptoServiceProvider();
    return System.Text.RegularExpressions.Regex.Replace(BitConverter.ToString(md5.ComputeHash(ASCIIEncoding.Default.GetBytes(text))), “-”, “”);
}
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文