.NET MD5 与 PHP MD5

上一篇 / 下一篇  2007-06-11 14:09:05 / 个人分类:PHP

最近在做一个php和.net共同组成的项目,接收.net部分传送过来的一个经md5过的数据,我惊奇的发现,居然和php进行md5的结果不同,这是为啥呢?
*vS$E+WT!G!J0PHPChina 开源社区门户\1gpfF
.net端程序是这么写的:PHPChina 开源社区门户]$G&L.Ib+}&|!I4}
System.Text.ASCIIEncoding encoding=new System.Text.ASCIIEncoding();
5Y:u\%~\3{7ZF0byte[] bytesSrc = encoding.GetBytes("xutf");
r6OD2d5E0AE1z0System.Security.Cryptography.MD5 md5 = new System.Security.Cryptography.MD5CryptoServiceProvider();PHPChina 开源社区门户.ZQ*yuu
byte[] result = md5.ComputeHash(bytesSrc);
*O-lX!a\ LA0string keyMd5=Convert.ToBase64String(result);
输入的"xutf",得出的结果是"5j1NYFDLhM9dc/XOfRwkyg=="。
EEd!ESeV|l0PHPChina 开源社区门户 O r;F0W1T] s2rt
php端程序是这么写的:
G(u2p|+Q9\@K0
$keymd5=base64_encode(md5("xutf"));
同样输入"xutf",得出来的结果却是"ZTYzZDRkNjA1MGNiODRjZjVkNzNmNWNlN2QxYzI0Y2E="。PHPChina 开源社区门户s`B9]@x9xK3I

*H)S'z_b'E7n/[0这样下去,程序没法写了,同样的操作为什么结果不同呢?PHPChina 开源社区门户X5ZsS&x
PHPChina 开源社区门户,j![l9B;D,O@
原来php的md5函数输出的结果是转换成16位表示的md5结果,而.net的md5.ComputeHash方法输出的结果是原始的md5结果。(注:php5的md5函数stringmd5( string str [, bool raw_output] )开始支持输出原始结果,参数raw_output只支持php5,但是我在使用php4)PHPChina 开源社区门户 Y5GK)VPQL
PHPChina 开源社区门户F`d?K)M
如果想让php的结果等同于.net的结果,那么需要对md5函数的结果进行16进制字符串到标准字符串的转换。
;~ jq;~7b HrR0那么php程序应改为:
C9w6O*pS0
$md5hex=md5("xutf");PHPChina 开源社区门户UD2]-{-k,F0?1V
$len=strlen($md5hex)/2;PHPChina 开源社区门户E;o/F2UE.g+H{8uM
$md5raw="";PHPChina 开源社区门户t A Fc#R3rf N
for($i=0;$i<$len;$i++) { $md5raw=$md5raw . chr(hexdec(substr($md5hex,$i*2,2))); } $keyMd5=base64_encode($md5raw);
PHPChina 开源社区门户3z,FwWQ9A?O
如果想让.net的结果等同于php的结果,那么需要把md5.ComputeHash方法输出的结果转换成16进制字符串,那么.net程序应该改为:
u ht:[)Ac,A G0
System.Text.ASCIIEncoding encoding=new System.Text.ASCIIEncoding();PHPChina 开源社区门户;E2~wqd9T/?s
byte[] bytesSrc = encoding.GetBytes("xutf");
[9l,Woo-Ye0System.Security.Cryptography.MD5 md5 = new System.Security.Cryptography.MD5CryptoServiceProvider();
X\,eX7B |7[0byte[] result = md5.ComputeHash(bytesSrc);PHPChina 开源社区门户Sa2vw{+pVh

v(f#b%N5}5AP4S[ \5t0StringBuilder sb = new StringBuilder();PHPChina 开源社区门户L#}4^1` yHn ~
for (int i = 0; i < result.Length; i++)
sX F9j\Cn(u0sb.AppendFormat("{0:x2}", result[i]);PHPChina 开源社区门户5N5bl y|f%Uj
string s1=sb.ToString();PHPChina 开源社区门户'|"P6S5[S3`5y
byte[] bytesmd5 = encoding.GetBytes(s1);PHPChina 开源社区门户 r#c&g E2dO2u#\
string keymd5=Convert.ToBase64String(bytesmd5);

TAG: PHP

 

评分:0

我来说两句

显示全部

:loveliness: :handshake :victory: :funk: :time: :kiss: :call: :hug: :lol :'( :Q :L ;P :$ :P :o :@ :D :( :)

Open Toolbar