脚本宝典收集整理的这篇文章主要介绍了在C#中生成与PHP一样的MD5 Hash Code的方法,脚本宝典觉得挺不错的,现在分享给大家,也给大家做个参考。
最近在对一个现有的系统进行C#改造,该系统以前是用PHP做的,后台的管理员登陆用的是MD5加密算法。在PHP中,要对一个字符串进行MD5加密非常简单,一行代码即可:
md5("Something you want to encrypt.")
直接调
用Md5()方法,然后将要进行MD5加密的字符串传进去,就可以得到返回的hash code。在C#中
应该也会有对应的算法吧!对吗?我首先尝试了下面的代码,结果得到的hash code和PHP不一样。
p
ublic
static string MD5(string stringToHash)
{
return FormsAuthentication.HashPasswor
DForStorin
ginconfigFile(stringToHash, "md5");
}
所以,我们不得不借用C#的MD5CryptoService
PRovider对象自己写代码进行转换。
1. 实例化MD5CryptoServiceProvider对象
2. 将字符串转换成byt
e数组
3. 使用MD5CryptoServiceProvider对象的ComputeHash()方法将byte数组进行加密,返回转换后的byte数组
4. 在讲byte数组转换成字符串之前,还需要对其进行遍历并做如下转换:
myByte.ToString("x2").ToLower()
然后,你才能得到和PHP中一样的MD5 hash code。为什么在.NET中要这么麻烦,或许这也是为什么那么多的开发人员仍然热衷于
PHP开发的理由之一,每一门
编程语言都有它自身的魅力,也都有它存在的意义!
基于上面的讨论,完整的代码如下:
public static string MD5ForPHP(string stringToHash)
{
VAR md5 = new
System.Secur
ITy.Cryptography.MD5CryptoServiceProvider();
byte[] em
ailBytes = Encoding.UTF8.GetBytes(stringToHash.ToLower());
byte[] hashedEmailBytes = md5
.COMputeHash(emailBytes);
StringBuilder sb = new StringBuilder();
for
each (var b in hashedEmailBytes)
{
sb.Ap
PEnd(b.ToString("x2").ToLower());
}
return sb.ToString();
}
或者,你也可以把上面的方法写成一个C#扩展方法,只需要修改方法签名即可。
public static string MD5ForPHP(this String, string stringToHash)
{
// Your code here.
}
PHP程序和C#程序在许多方面都会涉及到格式之间的转换,如果运行PHP的
服务器是UNIX类型的,则还会存在日期格式之间的转换。下面的两个方法展示了如何将UNIX时间转换成C# DateTime以及如何将C# DateTime转换成UNIX时间。
public static DateTime UnixTimeSt
ampToDateTime(long unixTimeStamp)
{
// Unix timestamp is seconds past epoch
DateTime dtDateTime = new DateTime(1970, 1, 1, 0, 0, 0, 0, System.DateTimeKind.Utc);
return dtDateTime.AddSeconds(unixTimeStamp);
}
public static long DateTimeToUnixTimeStamp(DateTime datetime)
{
TimeSpan span = (datetime - new DateTime(1970, 1, 1, 0, 0, 0, 0, DateTimeKind.Utc));
return (long)span.
totalSeconds;
}
脚本宝典总结
以上是脚本宝典为你收集整理的在C#中生成与PHP一样的MD5 Hash Code的方法全部内容,希望文章能够帮你解决在C#中生成与PHP一样的MD5 Hash Code的方法所遇到的问题。
如果觉得脚本宝典网站内容还不错,欢迎将脚本宝典推荐好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。