请使用QQ关联注册PLM之家,学习更多关于内容,更多精彩原创视频供你学习!
您需要 登录 才可以下载或查看,没有账号?注册
x
MD5算法简单的来说就是把任意长度的字串变换成固定长度(通常是128位)的16进制串。RFC 1321定义了MD5算法。
7 S9 `- O& h4 ], `8 h& s5 _* ]+ eMD5的用途主要有:
0 N' j7 C( w2 ? u6 L# _7 l一致性验证。比如我们从网上下载了某个文件,网站上一般会给出该文件的MD5值,我们下载下来后,可以利用工具计算出! l8 Z9 G7 x( ?9 C1 ]3 @
新的MD5值,与正确的MD5值进行对照,如果不一样,则可以断定该文件下载出错或被篡改了。0 B' _/ B5 [# q5 s3 j2 r
数字签名。可以用MD5算法对发布的程序或发布的消息生成MD5值作为签名等。- R4 `, ~; A" \' ^( H6 w
密码存储。在传输过程中或存储过程中,直接用明文的密码都是很危险的。可以在传输之前先用MD5加密,存储也不用存储1 ?% T; O, N. p n9 J- E# z0 D) R
明文,可以直接存储MD5值。在验证时,先把输入的密码转换成MD5值再与存储值进行对比。 对于密码存储,Asp.net的实现方法为:
' E* S; {& b2 Q1 l[mw_shl_code=csharp,true]protected void Page_Load(object sender, EventArgs e)/ ]- ]4 z% G/ {9 J! _3 E% D) q
{
5 s0 q* R) j0 X l; p string plainPassword = "innovator";
$ T) H) G2 Y& D- u
4 f' ^. M7 {$ M) Q System.Security.Cryptography.MD5 md5 = new System.Security.Cryptography.MD5CryptoServiceProvider();
3 W4 i& V2 s5 F) J% y7 l4 P System.Text.ASCIIEncoding ascii = new System.Text.ASCIIEncoding();* Z1 X- e( S4 ^# u
byte[] data = ascii.GetBytes(plainPassword);/ W! j. P6 D: A a8 r& _2 }- o' Z
byte[] result = md5.ComputeHash(data);. g: o$ ]4 m1 \; F: Y
// Convert the MD5 result to Hexadecimal string5 R" n& ^( c2 R+ E; o
6 T; \5 w( \- U5 M4 E string MD5Password = BinaryToHex(result);
2 E1 y& n/ e" t' c string aa = "";
9 k" A2 ~4 m& P% w }[/mw_shl_code]
, R5 C7 ~7 o* w' k6 {# Z[mw_shl_code=csharp,true]private String BinaryToHex(byte[] BinaryArray)$ f3 p8 u, [- L3 d2 ~) F) E+ a
{
$ S" f r$ p$ H! [ q2 ~1 H2 b) g* h string result = "";
9 e$ o* l; u) e3 D) X% @' v6 N6 N long lowerByte;, x8 ^+ D! N3 c" ?( ?( k
long upperByte;4 v0 Q. z8 C8 S
- a# o V. L8 B8 i4 i
foreach (Byte singleByte in BinaryArray). F5 y* _% [; X
{
1 E! h, f+ I) d- M+ P lowerByte = singleByte & 15;/ W# Y9 }+ f, W9 E& j3 V
upperByte = singleByte >> 4;% A# G' ?- t. b
5 N- S% v! h5 ?0 |4 X" M: F
result += NumberToHex(upperByte);" A7 B: F* z4 y& Q1 T
result += NumberToHex(lowerByte);
5 p, L) D9 W% ~ }
+ Z1 R' B. Q+ V8 O return result;
$ V( u$ P! ?: e* y5 A& L. w! g }[/mw_shl_code] * |1 e5 l2 N+ T( U$ W6 _& b) ]8 w
[mw_shl_code=csharp,true]private static char NumberToHex(long Number)0 B `, Y3 O. Q% b2 Y' m, n$ L6 U1 N
{
$ `1 q( ~8 s! _8 d if (Number > 9)& G. a. l: s* `# s+ A, `" ?
return Convert.ToChar(65 + (Number - 10));# `# e, r: E" R! r( M
else
A8 U& A; a O1 Y+ C& T1 p @ return Convert.ToChar(48 + Number);/ Y: P8 J( H. F5 L+ D4 G
}[/mw_shl_code] 9 r+ `% G1 r2 g, L$ W' U
|