博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
asp.net实现md5加密方法详解
阅读量:4643 次
发布时间:2019-06-09

本文共 1918 字,大约阅读时间需要 6 分钟。

简单的说就是把一段明文 通过某种运算方式 求出密文。
例如:明文为:abcdefg 通过一些列运算 得到 密文 7ac66c0f148de9519b8bd264312c4d64
它具有两个特性:1.无碰撞,2.不可逆。
无碰撞是指: 7ac66c0f148de9519b8bd264312c4d64 这段密文 只能由 abcdefg 这段明文得到,除此之外其他的 明文加密后 其值 绝对不会等于 7ac66c0f148de9519b8bd264312c4d64,也就是说 没有那两个明文 加密后 会得到相同的密文。
不可逆是指: 明文通过加密后得到密文,而无法通过密文 求出明文。也就是说 当我们知道明文 adcdefg 可以通过加密得到 7ac66c0f148de9519b8bd264312c4d64,但是我们如果知道 某段文字 加密后 得到7ac66c0f148de9519b8bd264312c4d64,却无法算出 7ac66c0f148de9519b8bd264312c4d64这段文字是由谁加密而来的。
那么有同学一定会问,具体应该运用在什么地方?
一般来说 我们在做网站登录系统的时候 密码都是密文保存的,一般用的都是MD5加密。
用户在填写用户名 密码 点击注册之后,我们验证通过,要把用户信息存入数据库的时候,就需要先把用户输入的密码,通过MD5加密的方式,把加密后的密文,存入密码的字段。
那么一定有同学会细心的发现,刚刚还提到过 MD5加密是不可逆的,那么用户登录的时候如何判断用户输入的密码是否正确的呢?
例如 用户设置的密码 为 abcdefg,而存储的时候 我们存储的是 abcdefg加密过之后得到的值 7ac66c0f148de9519b8bd264312c4d64,那么用户再次登录时 会输入密码abcdefg,我们如何比较两者是否相等?
我们无法通过 加密后的值换算出 加密前的值,因此 我们通常的做法是,把用户再次登录时 输入的密码 再次加密 和数据库中 存放的值进行比对,如果相等 则说明输入的密码正确。
OK,基本原理和运用场景基本说的差不多了,最后再来说说 在ASP.NET中如何进行MD5加密。
在ASP.NET中MD5的加密方式很简单,代码如下:
复制代码 代码如下:
FormsAuthentication.HashPasswordForStoringInConfigFile(str, "MD5").ToLower();
注意,如果MD5加密的时候转换的是小写,那么在验证的时候也要转换成小写,保持统一。另外上述方式为32位的MD5加密方式,如果是16位的 则取32位加密结果的中间16位的值即可。
例子,
///
 
<summary>
 
///
 MD5加密
 
///
 
</summary>
 
///
 
<param name="strSource">
需要加密的明文
</param>
 
///
 
<returns>
返回32位加密结果
</returns>
 
public 
static 
string Get_MD5(
string strSource, 
string sEncode)
 {
     
//
new 
     System.Security.Cryptography.MD5 md5 = 
new System.Security.Cryptography.MD5CryptoServiceProvider();
     
//
获取密文字节数组
     
byte[] bytResult = md5.ComputeHash(System.Text.Encoding.GetEncoding(sEncode).GetBytes(strSource));
     
//
转换成字符串,并取9到25位 
     
//
string strResult = BitConverter.ToString(bytResult, 4, 8);  
     
//
转换成字符串,32位 (脚本学堂 www.jbxue.com)
     
string strResult = BitConverter.ToString(bytResult);
     
//
BitConverter转换出来的字符串会在每个字符中间产生一个分隔符,需要去除掉 
     strResult = strResult.Replace(
"
-
"
"");
     
return strResult.ToLower();
 }
posted on
2014-03-27 06:33 阅读(
...) 评论(
...)

转载于:https://www.cnblogs.com/linuxnotes/p/3627461.html

你可能感兴趣的文章
用开源中国(oschina)Git管理代码(整合IntelliJ 13.1.5)
查看>>
My Router
查看>>
工作中的一些经验小结
查看>>
thinkPHP使用模型更新数据
查看>>
mysql函数(一.字符函数)
查看>>
rancher2 HA部署注意事项
查看>>
AngularJS
查看>>
汇编语言实验四
查看>>
一道常被人轻视的前端JS面试题
查看>>
LeetCode Intersection of Two Arrays
查看>>
第14章 Wi-Fi系统应用 14.1 了解Wi-Fi系统的结构
查看>>
day70-oracle PLSQL_02光标
查看>>
[python] 修改Tkinter 的默认图标
查看>>
Arcgis API for Android之GPS定位
查看>>
金融版“Uber”?直销银行能从Uber中学到些什么
查看>>
关于C++ 输入输出流状态控制
查看>>
webpack基本用法
查看>>
我是如何使用ES6重写电商网站官网的?
查看>>
2017-10-10 都市传说: "部分"中文出现乱码
查看>>
数据运算
查看>>