惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

T
Threatpost
Recorded Future
Recorded Future
Microsoft Azure Blog
Microsoft Azure Blog
M
MIT News - Artificial intelligence
酷 壳 – CoolShell
酷 壳 – CoolShell
I
InfoQ
博客园 - 司徒正美
Stack Overflow Blog
Stack Overflow Blog
Simon Willison's Weblog
Simon Willison's Weblog
爱范儿
爱范儿
D
Darknet – Hacking Tools, Hacker News & Cyber Security
V
Visual Studio Blog
H
Help Net Security
博客园_首页
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
B
Blog RSS Feed
美团技术团队
G
GRAHAM CLULEY
cs.CL updates on arXiv.org
cs.CL updates on arXiv.org
C
Cyber Attacks, Cyber Crime and Cyber Security
腾讯CDC
G
Google Developers Blog
Cyberwarzone
Cyberwarzone
T
Tenable Blog
A
About on SuperTechFans
WordPress大学
WordPress大学
Engineering at Meta
Engineering at Meta
L
Lohrmann on Cybersecurity
C
Cisco Blogs
K
Kaspersky official blog
Recent Announcements
Recent Announcements
Vercel News
Vercel News
C
Cybersecurity and Infrastructure Security Agency CISA
有赞技术团队
有赞技术团队
P
Privacy & Cybersecurity Law Blog
Hugging Face - Blog
Hugging Face - Blog
S
Schneier on Security
Apple Machine Learning Research
Apple Machine Learning Research
Cloudbric
Cloudbric
Scott Helme
Scott Helme
Google Online Security Blog
Google Online Security Blog
cs.AI updates on arXiv.org
cs.AI updates on arXiv.org
MyScale Blog
MyScale Blog
Cisco Talos Blog
Cisco Talos Blog
Attack and Defense Labs
Attack and Defense Labs
Google DeepMind News
Google DeepMind News
N
News and Events Feed by Topic
D
Docker
U
Unit 42
S
Security @ Cisco Blogs

博客园 - XiaoBei

【Oracle经典】132个oracle热门精品资料——下载目录 ORACLE日期时间函数大全 Oracle 11g 软件及补丁下载地址 Oracle 10G软件及补丁下载地址 HP大中华区总裁孙振耀退休十五天后九大感言 TSM简介(二) - 策略、介质与服务器管理 TSM简介(一)- 原理与特点 【转】物以类聚,人以群分--走出软件作坊:三五个人十来条枪 如何成为开发正规军(十一) 【转】将服务费用DIY到底----走出软件作坊:三五个人十来条枪 如何成为开发正规军(十) 探求数据仓库关键环节ETL的本质 .Net开源的CMS、Portal系统大全 说服别人的六种好方法 BI前端展示工具评估 学习.net应该知道什么 几十个源代码网站 【转】实施费用也能DIY--走出软件作坊:三五个人十来条枪 如何成为开发正规军(九) 【转】水清则无鱼--走出软件作坊:三五个人十来条枪 如何成为开发正规军(八) ADO.NET常用对象详解之:Command对象 参数修饰符ref,out ,params的区别
ASP.Net中MD5和SHA1加密的几种方法
XiaoBei · 2008-07-09 · via 博客园 - XiaoBei

首先简单介绍一下MD5SHA1:

MD5的全称是Message-Digest Algorithm 5(信息-摘要算法),在90年代初由Mit Laboratory for Computer ScienceRsa data security incRonald l. rivest开发出来,经md2md3md4发展而来。它的作用是让大容量信息在用数字签名软件签署私人密匙前被"压缩"成一种保密的格式(就是把一个任意长度的字节串变换成一定长的大整数)。不管是md2md4还是md5,它们都需要获得一个随机长度的信息并产生一个128位的信息摘要。

加密哈希函数将任意长度的二进制字符串映射为固定长度的小型二进制字符串。加密哈希函数有这样一个属性:在计算上不大可能找到散列为相同的值的两个不同的输入;也就是说,两组数据的哈希值仅在对应的数据也匹配时才会匹配。数据的少量更改会在哈希值中产生不可预知的大量更改。所以你很难从加密后的文字中找到蛛丝马迹。

SHA1的全称是Secure Hash Algorithm(安全哈希算法)

MD5 算法的哈希值大小为 128 位。而SHA1 算法的哈希值大小为 160 位。两种算法都是不可逆。

虽说2004817日的美国加州圣巴巴拉的国际密码学会议(Crypto2004)上,来自中国山东大学的王小云教授做了破译MD5HAVAL-128 MD4RIPEMD算法的报告,公布了MD系列算法的破解结果。宣告了固若金汤的世界通行密码标准MD5的堡垒轰然倒塌,引发了密码学界的轩然大波。但是我觉得对于我们做普通的软件来说,这个加密安全程度已经足够使用了。

我们平常用的最多的无非就是加密用户密码,把加密好的密码存储到数据库中,进行密码比较的时候,把用户输入的密码再进行加密,然后与数据库中的密文进行比较。至于asp.net类中是如何实现加密算法的,这个我们不需要关心,会用就行了。 

下面就是Asp.net中几种加密方法。加密算法有两种,也就是上面提到的MD5SHA1,这里我举的例子是以MD5为例,SHA1大致相同,只是使用的类不一样。

MD5 相关类:

System.Security.Cryptography.MD5

System.Security.Cryptography.MD5CryptoServiceProvider()

System.Web.Security.FormsAuthentication.HashPasswordForStoringInConfigFile(strSource, "MD5")

SHA1相关类:

System.Security.Cryptography.SHA1

System.Security.Cryptography.SHA1CryptoServiceProvider()

System.Web.Security.FormsAuthentication.HashPasswordForStoringInConfigFile(strSource, "SHA1")

方法如下:(用的vs2005)

 1/// <summary>
 2    /// 方法一:通过使用 new 运算符创建对象
 3    /// </summary>
 4    /// <param name="strSource">需要加密的明文</param>
 5    /// <returns>返回16位加密结果,该结果取32位加密结果的第9位到25位</returns>

 6    public string Get_MD5_Method1(string strSource)
 7    {
 8        //new
 9        System.Security.Cryptography.MD5 md5 = new System.Security.Cryptography.MD5CryptoServiceProvider();
10
11        //获取密文字节数组
12        byte[] bytResult = md5.ComputeHash(System.Text.Encoding.Default.GetBytes(strSource));
13
14        //转换成字符串,并取9到25位
15        string strResult = BitConverter.ToString(bytResult, 48);
16        //转换成字符串,32位
17        //string strResult = BitConverter.ToString(bytResult);
18
19        //BitConverter转换出来的字符串会在每个字符中间产生一个分隔符,需要去除掉
20        strResult = strResult.Replace("-""");
21        return strResult;
22    }

23
24    /// <summary>
25    /// 方法二:通过调用特定加密算法的抽象类上的 Create 方法,创建实现特定加密算法的对象。
26    /// </summary>
27    /// <param name="strSource">需要加密的明文</param>
28    /// <returns>返回32位加密结果</returns>

29    public string Get_MD5_Method2(string strSource)
30    {
31        string strResult = "";
32
33        //Create
34        System.Security.Cryptography.MD5 md5 = System.Security.Cryptography.MD5.Create();
35
36        //注意编码UTF8、UTF7、Unicode等的选择 
37        byte[] bytResult = md5.ComputeHash(System.Text.Encoding.UTF8.GetBytes(strSource));
38
39        //字节类型的数组转换为字符串
40        for (int i = 0; i < bytResult.Length; i++)
41        {
42            //16进制转换 
43            strResult = strResult + bytResult[i].ToString("X");
44        }

45        return strResult;
46    }

47
48    /// <summary>
49    /// 方法三:直接使用HashPasswordForStoringInConfigFile生成
50    /// </summary>
51    /// <param name="strSource">需要加密的明文</param>
52    /// <returns>返回32位加密结果</returns>

53    public string Get_MD5_Method3(string strSource)
54    {
55        return System.Web.Security.FormsAuthentication.HashPasswordForStoringInConfigFile(strSource, "MD5");
56    }

这些加密函数都是在服务器端执行,也就是说,当用户输入密码后,从客户端到服务器端传输时,用户的密码没有任何保护,很危险。银行的做法是在客户端安装ActiveX控件,在客户端就把一些重要信息进行加密,再发送。这个偶就不会拉,很希望能学习学习做这种ActiveX控件。