如何在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相关推荐
- 浅析如何在Nancy中生成API文档
前言 前后端分离,或许是现如今最为流行开发方式,包括UWP.Android和IOS这样的手机客户端都是需要调用后台的API来进行数据的交互. 但是这样对前端开发和APP开发就会面临这样一个问题:如何知 ...
- 中boxplot函数的参数设置_如何在Python中生成图形和图表
在本章中,我们将学习如何在Python中生成图形和图表,同时将使用函数和面向对象的方法来可视化数据. Python中常用的一些可视化数据包括以下几种. Matplotlib. Seaborn. ggp ...
- 如何在Java中生成比特币钱包地址
让我们通过学习比特币(Bitcoin)如何实施该技术的各个方面来工作,好吗?该技术包括以下几个方面: 比特币地址bitcoin address是用来发送和接收比特币的. 交易transaction是比 ...
- 大数据分析如何在Python中生成FiveThirtyEight图
大数据分析如何在Python中生成FiveThirtyEight图?如果你阅读大数据分析文章,则可能已经迷失了FiveThirtyEight的内容.自然,他们的出色可视化使你印象深刻.你想制作自己的出 ...
- 如何在javascript中生成1到10之间的随机数
在这篇文章中,我们将看到如何在 javascript 中生成 1 到 10 之间的随机数. 如何在javascript中生成1到10之间的随机数 我们可以简单地使用 Math.random() 方法在 ...
- JavaScript 随机数 – 如何在 JS 中生成随机数
在使用 JavaScript 程序时,有时您可能需要生成一个随机数. 例如,您可能希望在开发 JavaScript 游戏(例如猜数字游戏)时生成一个随机数. JavaScript 有许多用于处理数字和 ...
- linux 随机密码更改,如何在Linux中生成EncryptDecrypt随机密码
安全是网络世界中的主要问题之一.网络安全,也称为信息技术安全,重点在于保护计算机,网络,程序和数据免遭意外或未经授权的访问,更改或破坏.我们将密码用于计算机,电子邮件,云,电话,文档等.我们都知道选择 ...
- python制作词云时出现figure1 figure2_「中文版」如何在Python中生成任何形状的词云...
有机会介绍一些有趣的项目,向更多人甚至是非技术人员推广Python和人工智能的东西还是蛮有意义的.话不多说,本文将介绍如何将你喜欢的文章或者歌词做一个炫丽的词云图片. 什么是词云呢?简单来说就是,将提 ...
- 如何在C中生成随机int?
是否有在C中生成随机int数的函数? 或者我必须使用第三方库吗? #1楼 让我们来看看. 首先,我们使用srand()函数为随机化器播种. 基本上,计算机可以根据提供给srand()的数字生成随机数. ...
- catia制作物料明细,如何在CATIA中生成产品物料清单 划重点了
本教会大家如何在CATIA装配体中生成产品物料清单. 工具/材料 CATIA V5R19 操作方法 01 首先,我们打开CATIA,在菜单栏中单击文件>打开...,在弹出的文件对话框中选择建好的 ...
最新文章
- 教你玩转 统一异常处理
- python常用模块大全总结-Python模块汇总(常用第三方库)
- DFS深度优先搜索算法/BFS广度优先搜索算法(c/c++)
- 科大星云诗社动态20210330
- MATLAB图像增强程序举例
- GDAL读取Shp问题解决:Unable to open EPSG support file gcs.csv
- Java中矩阵运算(math3的使用)
- ubuntu下mysql5.7安装教程_Ubuntu 16.04 上安装 MySQL 5.7 教程
- python画猴子_Python学习笔记(1)
- 移动磁盘修复、格式化【微PE】
- Endnote x7 和X8的下载
- 电脑蓝屏如何修复?几个步骤,突破极限!让电脑不再蓝屏!
- git 拉取最新代码覆盖本地
- 初次打开QQ空间后IE卡死问题处理
- 应用软件与系统不兼容的解决办法,仅供参考
- 绝对值函数可导点的判断
- 深度学习常规概念(持续更新)
- Error querying database. Cause: java.lang.IndexOutOfBoundsException: Index 5 out of bounds for leng
- 微信小程序计算时间差
- C语言学习笔记(四) 运算符优先级
热门文章
- 基于麻雀算法的投影寻踪模型 - 附代码
- 《剑指offer》面试题60——把二叉树打印成多行(C++)
- python-绘制双轴柱状图
- 自定义RatingBar
- 实习踩坑之路:使用@Value注解导致Parse attempt failed for value [08:00],时间转换出错?
- 15 张图,了解一下 TCP/IP 必知也必会的 10 个问题
- 即学即用的 30 段 Python 实用代码
- Android仿京东、天猫app的商品详情页的布局架构, 以及功能实现
- 如何在程序中不用加号实现加法_python不用加号实现加法
- linux下c爬取天气的源码,一个在conky中实现获取本地天气的c源代码