Home > php教程 > php手册 > 如何在C#中生成与PHP一样的MD5 Hash Code

如何在C#中生成与PHP一样的MD5 Hash Code

WBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWB
Release: 2016-06-06 19:40:10
Original
1436 people have browsed it

最近在对一个现有的系统进行C#改造,该系统以前是用PHP做的,后台的管理员登陆用的是MD5加密算法。在PHP中,要对一个字符串进行MD5加密非常简单,一行代码即可: md5 ("Something you want to encrypt.") 直接调用md5()方法,然后将要进行MD5加密的字符串传

  最近在对一个现有的系统进行C#改造,该系统以前是用PHP做的,后台的管理员登陆用的是MD5加密算法。在PHP中,要对一个字符串进行MD5加密非常简单,一行代码即可:

<span>md5</span>("Something you want to encrypt.")
Copy after login

  直接调用md5()方法,然后将要进行MD5加密的字符串传进去,就可以得到返回的hash code。在C#中应该也会有对应的算法吧!对吗?我首先尝试了下面的代码,结果得到的hash code和PHP不一样

<span>public</span> <span>static</span> <span>string</span> MD5(<span>string</span><span> stringToHash)
{
    </span><span>return</span> FormsAuthentication.HashPasswordForStoringInConfigFile(stringToHash, <span>"</span><span>md5</span><span>"</span><span>);
}</span>
Copy after login

  所以,我们不得不借用C#的MD5CryptoServiceProvider对象自己写代码进行转换。

  1. 实例化MD5CryptoServiceProvider对象

  2. 将字符串转换成byte数组

  3. 使用MD5CryptoServiceProvider对象的ComputeHash()方法将byte数组进行加密,返回转换后的byte数组

  4. 在讲byte数组转换成字符串之前,还需要对其进行遍历并做如下转换:

myByte.ToString(<span>"</span><span>x2</span><span>"</span>).ToLower()
Copy after login

  然后,你才能得到和PHP中一样的MD5 hash code。为什么在.NET中要这么麻烦,或许这也是为什么那么多的开发人员仍然热衷于PHP开发的理由之一,每一门编程语言都有它自身的魅力,也都有它存在的意义!

  基于上面的讨论,完整的代码如下:

<span>public</span> <span>static</span> <span>string</span> MD5ForPHP(<span>string</span><span> stringToHash)
{
    </span><span>var</span> md5 = <span>new</span><span> System.Security.Cryptography.MD5CryptoServiceProvider();
    </span><span>byte</span>[] emailBytes =<span> Encoding.UTF8.GetBytes(stringToHash.ToLower());
    </span><span>byte</span>[] hashedEmailBytes =<span> md5.ComputeHash(emailBytes);
    StringBuilder sb </span>= <span>new</span><span> StringBuilder();
    </span><span>foreach</span> (<span>var</span> b <span>in</span><span> hashedEmailBytes)
    {
        sb.Append(b.ToString(</span><span>"</span><span>x2</span><span>"</span><span>).ToLower());
    }
    </span><span>return</span><span> sb.ToString();
}</span>
Copy after login

  或者,你也可以把上面的方法写成一个C#扩展方法,只需要修改方法签名即可。

<span>public</span> <span>static</span> <span>string</span> MD5ForPHP(<span>this</span> String, <span>string</span><span> stringToHash)
{
    </span><span>//</span><span> Your code here.</span>
}
Copy after login

  PHP程序和C#程序在许多方面都会涉及到格式之间的转换,如果运行PHP的服务器是UNIX类型的,则还会存在日期格式之间的转换。下面的两个方法展示了如何将UNIX时间转换成C# DateTime以及如何将C# DateTime转换成UNIX时间。

<span>public</span> <span>static</span> DateTime UnixTimeStampToDateTime(<span>long</span><span> unixTimeStamp)
{
    </span><span>//</span><span> Unix timestamp is seconds past epoch</span>
    DateTime dtDateTime = <span>new</span> DateTime(<span>1970</span>, <span>1</span>, <span>1</span>, <span>0</span>, <span>0</span>, <span>0</span>, <span>0</span><span>, System.DateTimeKind.Utc);<br></span><span>    return</span><span> dtDateTime.AddSeconds(unixTimeStamp);
}

</span><span>public</span> <span>static</span> <span>long</span><span> DateTimeToUnixTimeStamp(DateTime datetime)
{
    TimeSpan span </span>= (datetime - <span>new</span> DateTime(<span>1970</span>, <span>1</span>, <span>1</span>, <span>0</span>, <span>0</span>, <span>0</span>, <span>0</span><span>, DateTimeKind.Utc));
    </span><span>return</span> (<span>long</span><span>)span.TotalSeconds;
}</span>
Copy after login

 

Related labels:
Statement of this Website
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn
Latest Issues
node.js - gulp.task async issue
From 1970-01-01 08:00:00
0
0
0
Error when importing traits
From 1970-01-01 08:00:00
0
0
0
Why did the teacher’s submission fail?
From 1970-01-01 08:00:00
0
0
0
Popular Recommendations
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template