【问题标题】:PHP MD5/base64 encryption to C# md5/base64 encryptionPHP MD5/base64 加密转C# md5/base64 加密
【发布时间】:2011-05-24 22:35:02
【问题描述】:

我正在尝试将一些 C# ASP.NET Web 服务集成到我的 PHP 应用程序中,但是存在一个大问题。 C# webservice 进行加密的方式与 PHP 进行 MD5 加密的方式不兼容。我找到了将 C# MD5 转换为 PHP MD5 的解决方案,但是我无法更改 C# 代码。有没有办法改变 PHP 进行 MD5 加密以匹配 C# 的方式? c# 加密的工作原理是这样的:

MD5CryptoServiceProvider MD5 = new MD5CryptoServiceProvider();
byte[] bs = System.Text.Encoding.UTF8.GetBytes(stringToEncrypt);
String myString = Convert.ToBase64String(MD5.ComputeHash(bs));

【问题讨论】:

  • 也尝试分享您的 PHP 代码。而且从技术上讲,MD5 不是加密,而是一种单向哈希算法。
  • MD5 和 Base64 都不是encryptions; MD5 是cryptographic hash function,Base64 是base conversion,用 64 个可打印的 ASCII 字符表示二进制数据。
  • 我的代码是base64_encode(md5(utf8_encode('123456789')))
  • 显然我需要做 base64_encode(md5('123456789', true))

标签: c# php encryption md5 base64


【解决方案1】:

由于 MD5 是一种已发布的算法,因此 PHP 和 c# 中的实现是相同的。唯一的区别是它们产生的字节序列的字符串格式。 PHP 生成一个十六进制字符串,因此您只需将十六进制转换为 Base64。

【讨论】:

  • base64_encode(md5('123456789', true)) 也将按照 ryanzec 的说明工作 - 我没有提到为什么这完全有效,所以我将简要解释一下 - 可选的布尔值,默认为 false,声明您想要 md5 哈希的十六进制表示,而不是原始二进制表示
  • 感谢您提供此解决方案。它对我有用
【解决方案2】:

这可能是编码问题。确保您的 PHP 版本获取字符串的 UTF-8 表示,应用 MD5,然后转换为 base 64 字符串,应该没问题。

【讨论】:

  • 好吧,我正在做 base64_encode(md5(utf8_encode('123456789')))) 但与 C# 不同
【解决方案3】:

这是我之前在 PHP 和 C# 之间遇到的编码问题。

如果 PHP 正在处理 ISO-8859-1 字符串(这可能是您的情况),您可以这样做:

md5(utf8_encode($stringToEncrypt))

最好的测试方法是尝试一个非常简单的带有 a-z 内容的字符串,无论任何编码问题都应该可以正常工作。它有效而整个事情都没有,你有一个编码问题。

你也可以这样做:

byte[] bs = System.Text.Encoding.GetEncoding("ISO-8859-1").GetBytes(stringToEncrypt);

md5($stringToEncrypt)

会正常工作的。

【讨论】:

    【解决方案4】:

    我知道你有什么问题:

    String myString = Convert.ToBase64String(MD5.ComputeHash(bs)); 
    

    将从纯 MD5 数组散列中生成 Base64 字符串。

    PHP 将首先对 MD5 哈希进行十六进制表示,然后对其进行 base64 编码。

    您应该首先按照此处所述获得十六进制结果:

    http://blog.stevex.net/c-code-snippet-creating-an-md5-hash-string/

    然后对字符串进行base64编码。

    【讨论】:

    • 是的,我知道,但就像我说的,我不能更改 C#,只能更改 PHP
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-02-18
    • 2012-02-15
    • 2020-11-06
    相关资源
    最近更新 更多