【发布时间】:2016-08-02 03:25:38
【问题描述】:
我正在尝试使用 c# md5 和 php md5 来计算相同的结果,但它们给出的结果不同。 c#代码必须和php代码一致。
public string ToMD5(string orderId, string statusCode, string secretKey)
{
string key = orderId + "+" + statusCode;
key = Base64Encode(key);
MD5 m = System.Security.Cryptography.MD5.Create();
byte[] h = m.ComputeHash(Encoding.Default.GetBytes(key + secretKey));
string r = "";
foreach (byte b in h)
{
r += b.ToString("X2");
}
return r;
}
这里是php代码:
$key = $orderid."+".$status;
$prec = base64_encode($key);
$prec = $prec.$SecretKey;
$prec = md5($prec);
echo $prec;
c# 返回:CEC71705E5A25CCD21609B72053539FC
php 返回:f1542715b25b302553119fda1e8567bb
感谢您的帮助。
【问题讨论】:
-
您是否 100% 确定所有值都完全相同?您是否在运行时逐行检查代码以确保它的正确性?如果有一点不同,您将得到不同的哈希值。
-
请编辑或删除这个问题,因为它目前的价值极低。似乎很清楚
Encoding.Default.GetBytes(key + secretKey)和$prec.$SecretKey不是相同的字节序列,但不清楚为什么这对任何人都有用。 -
@KennyEvitt 这两个代码给出了我们测试的相同结果。你测试了吗?
-
@safa 如果两组代码给出相同的结果,那么保留这个问题没有意义。这个问题只有如果两组代码不产生相同的结果才有用。