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

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

md5("Something you want to encrypt.")

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

public static string MD5(string stringToHash)
{return FormsAuthentication.HashPasswordForStoringInConfigFile(stringToHash, "md5");
}

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

  1. 实例化MD5CryptoServiceProvider对象

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

  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.Security.Cryptography.MD5CryptoServiceProvider();byte[] emailBytes = Encoding.UTF8.GetBytes(stringToHash.ToLower());byte[] hashedEmailBytes = md5.ComputeHash(emailBytes);StringBuilder sb = new StringBuilder();foreach (var b in hashedEmailBytes){sb.Append(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 UnixTimeStampToDateTime(long unixTimeStamp)
{// Unix timestamp is seconds past epochDateTime 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相关推荐

  1. 浅析如何在Nancy中生成API文档

    前言 前后端分离,或许是现如今最为流行开发方式,包括UWP.Android和IOS这样的手机客户端都是需要调用后台的API来进行数据的交互. 但是这样对前端开发和APP开发就会面临这样一个问题:如何知 ...

  2. 中boxplot函数的参数设置_如何在Python中生成图形和图表

    在本章中,我们将学习如何在Python中生成图形和图表,同时将使用函数和面向对象的方法来可视化数据. Python中常用的一些可视化数据包括以下几种. Matplotlib. Seaborn. ggp ...

  3. 如何在Java中生成比特币钱包地址

    让我们通过学习比特币(Bitcoin)如何实施该技术的各个方面来工作,好吗?该技术包括以下几个方面: 比特币地址bitcoin address是用来发送和接收比特币的. 交易transaction是比 ...

  4. 大数据分析如何在Python中生成FiveThirtyEight图

    大数据分析如何在Python中生成FiveThirtyEight图?如果你阅读大数据分析文章,则可能已经迷失了FiveThirtyEight的内容.自然,他们的出色可视化使你印象深刻.你想制作自己的出 ...

  5. 如何在javascript中生成1到10之间的随机数

    在这篇文章中,我们将看到如何在 javascript 中生成 1 到 10 之间的随机数. 如何在javascript中生成1到10之间的随机数 我们可以简单地使用 Math.random() 方法在 ...

  6. JavaScript 随机数 – 如何在 JS 中生成随机数

    在使用 JavaScript 程序时,有时您可能需要生成一个随机数. 例如,您可能希望在开发 JavaScript 游戏(例如猜数字游戏)时生成一个随机数. JavaScript 有许多用于处理数字和 ...

  7. linux 随机密码更改,如何在Linux中生成EncryptDecrypt随机密码

    安全是网络世界中的主要问题之一.网络安全,也称为信息技术安全,重点在于保护计算机,网络,程序和数据免遭意外或未经授权的访问,更改或破坏.我们将密码用于计算机,电子邮件,云,电话,文档等.我们都知道选择 ...

  8. python制作词云时出现figure1 figure2_「中文版」如何在Python中生成任何形状的词云...

    有机会介绍一些有趣的项目,向更多人甚至是非技术人员推广Python和人工智能的东西还是蛮有意义的.话不多说,本文将介绍如何将你喜欢的文章或者歌词做一个炫丽的词云图片. 什么是词云呢?简单来说就是,将提 ...

  9. 如何在C中生成随机int?

    是否有在C中生成随机int数的函数? 或者我必须使用第三方库吗? #1楼 让我们来看看. 首先,我们使用srand()函数为随机化器播种. 基本上,计算机可以根据提供给srand()的数字生成随机数. ...

  10. catia制作物料明细,如何在CATIA中生成产品物料清单 划重点了

    本教会大家如何在CATIA装配体中生成产品物料清单. 工具/材料 CATIA V5R19 操作方法 01 首先,我们打开CATIA,在菜单栏中单击文件>打开...,在弹出的文件对话框中选择建好的 ...

最新文章

  1. 教你玩转 统一异常处理
  2. python常用模块大全总结-Python模块汇总(常用第三方库)
  3. DFS深度优先搜索算法/BFS广度优先搜索算法(c/c++)
  4. 科大星云诗社动态20210330
  5. MATLAB图像增强程序举例
  6. GDAL读取Shp问题解决:Unable to open EPSG support file gcs.csv
  7. Java中矩阵运算(math3的使用)
  8. ubuntu下mysql5.7安装教程_Ubuntu 16.04 上安装 MySQL 5.7 教程
  9. python画猴子_Python学习笔记(1)
  10. 移动磁盘修复、格式化【微PE】
  11. Endnote x7 和X8的下载
  12. 电脑蓝屏如何修复?几个步骤,突破极限!让电脑不再蓝屏!
  13. git 拉取最新代码覆盖本地
  14. 初次打开QQ空间后IE卡死问题处理
  15. 应用软件与系统不兼容的解决办法,仅供参考
  16. 绝对值函数可导点的判断
  17. 深度学习常规概念(持续更新)
  18. Error querying database. Cause: java.lang.IndexOutOfBoundsException: Index 5 out of bounds for leng
  19. 微信小程序计算时间差
  20. C语言学习笔记(四) 运算符优先级

热门文章

  1. 基于麻雀算法的投影寻踪模型 - 附代码
  2. 《剑指offer》面试题60——把二叉树打印成多行(C++)
  3. python-绘制双轴柱状图
  4. 自定义RatingBar
  5. 实习踩坑之路:使用@Value注解导致Parse attempt failed for value [08:00],时间转换出错?
  6. 15 张图,了解一下 TCP/IP 必知也必会的 10 个问题
  7. 即学即用的 30 段 Python 实用代码
  8. Android仿京东、天猫app的商品详情页的布局架构, 以及功能实现
  9. 如何在程序中不用加号实现加法_python不用加号实现加法
  10. linux下c爬取天气的源码,一个在conky中实现获取本地天气的c源代码