PHP MD5 / base64加密到C#md5 / base64加密

时间:2010-12-13 21:40:04

标签: c# php encryption md5 base64

我正在尝试将一些C#ASP.NET webservice集成到我的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));

4 个答案:

答案 0 :(得分:3)

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

答案 1 :(得分:0)

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

答案 2 :(得分:0)

这是我之前在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)

工作得很好。

答案 3 :(得分:0)

我知道你的问题是什么:

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编码字符串。