个性原创,打造品牌

拒绝模仿抄袭、拒绝模板建站;
多位资深网页设计师同时设计,让您优中选优;
网站独一无二,品牌轻易提升...

了解详情 >

代码规范,国际标准

后台php+mysql动态管理,功能强大,千万级数据;
前台div+css生成静态,代码精简,访问速度快,
符合w3c国际标准,兼容ie/火狐/苹果等任意浏览器...

了解详情 >

细微高效,全程无忧

域名一个,主机一台;
主机BGP多线路,5G存储空间,流量不限;
新闻录入、图片处理、数据备份、安全监测、网站升级...

了解详情 >

移动时代,机不可失

全新视觉、创新操作;
跨平台兼容,微信无缝对接;
不容错过的手机网络商机,不能错过的手机网站时代...

了解详情 >

搜索领先,锁定访客

在主流搜索引擎的搜索结果中,
网站的名称,排在第一页的第一名,
网站其他相关的3-5个关键词,排在第一页...

了解详情 >

营销利器,决胜千里

全国统一呼叫,品牌企业的象标志。
中国电信4008/4009、中国联通4000/4006,号码任选;
通话资费预存...

了解详情 >
以“信”为主的服务理念,“源”为标杆的服务特点351532641点击咨询010-86203368联系电话
CSS问题设计问题程序问题优化问题

ASP.NET中必学的几种加密方法

发布时间:2015-07-15      浏览次数:4185

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/**////

2 /// 方法一:通过使用 new 运算符创建对象

3 ///

4 /// 需要加密的明文

5 /// 返回16位加密结果,该结果取32位加密结果的第9位到25

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 //转换成字符串,并取925

15 string strResult = BitConverter.ToString(bytResult, 4, 8);

16 //转换成字符串,32

17 //string strResult = BitConverter.ToString(bytResult);

18

19 //BitConverter转换出来的字符串会在每个字符中间产生一个分隔符,需要去除掉

20 strResult = strResult.Replace("-", "");

21 return strResult;

22 }

23

24 /**////

25 /// 方法二:通过调用特定加密算法的抽象类上的 Create 方法,创建实现特定加密算法的对象。

26 ///

27 /// 需要加密的明文

28 /// 返回32位加密结果

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 //注意编码UTF8UTF7Unicode等的选择

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 /**////

49 /// 方法三:直接使用HashPasswordForStoringInConfigFile生成

50 ///

51 /// 需要加密的明文

52 /// 返回32位加密结果

53 public string Get_MD5_Method3(string strSource)

54 {

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

56 }

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

上一篇:Perl、PHP、ASP、JSP技术比较
下一篇:Dreamweaver代码不自动提示的问题

Copyright©2016  xinycx.com  All Rights Reserved  北京信源创想科技有限公司  备案号:京ICP备17071760号-1   

京公网安备 11010802036302号


地址:北京市海淀区闵庄路门头馨村北二区33号楼3单元102室  电话:010-86203368  代理域名注册服务机构:北京新网数码信息技术有限公司

北京网站建设 北京网站制作 信源创想 品牌网站建设 企业网站建设 网站设计 APP开发 微信开发 前端切图 DIV+CSS html5切图 APP切图