请使用QQ关联注册PLM之家,学习更多关于内容,更多精彩原创视频供你学习!
您需要 登录 才可以下载或查看,没有账号?注册
x
MD5算法简单的来说就是把任意长度的字串变换成固定长度(通常是128位)的16进制串。RFC 1321定义了MD5算法。
8 h n ^% l( R* MMD5的用途主要有:
& x$ o1 w3 v- p+ j1 ^( Q( Y; C一致性验证。比如我们从网上下载了某个文件,网站上一般会给出该文件的MD5值,我们下载下来后,可以利用工具计算出1 g7 y$ {6 K7 c; G5 S' s
新的MD5值,与正确的MD5值进行对照,如果不一样,则可以断定该文件下载出错或被篡改了。
2 l$ }; M3 |0 d. [+ k* ?数字签名。可以用MD5算法对发布的程序或发布的消息生成MD5值作为签名等。; {0 \! [, {( L" [
密码存储。在传输过程中或存储过程中,直接用明文的密码都是很危险的。可以在传输之前先用MD5加密,存储也不用存储& W6 L' ^% j% C; n$ x( e: W: e
明文,可以直接存储MD5值。在验证时,先把输入的密码转换成MD5值再与存储值进行对比。 对于密码存储,Asp.net的实现方法为:
8 C. c8 e, k% D0 e[mw_shl_code=csharp,true]protected void Page_Load(object sender, EventArgs e)
' z) j, _+ b! k: E8 ~+ L {; h: P: F) o w a& D0 R4 C
string plainPassword = "innovator";, o- H* C1 |: \" J5 P; Q! v
) Y( u& D- V* f# B) S4 x1 X3 v System.Security.Cryptography.MD5 md5 = new System.Security.Cryptography.MD5CryptoServiceProvider();
, E3 v+ \: j% D) s System.Text.ASCIIEncoding ascii = new System.Text.ASCIIEncoding();' w0 d1 b7 S, P; q0 [, F
byte[] data = ascii.GetBytes(plainPassword);9 ?. k6 i, x7 {, E
byte[] result = md5.ComputeHash(data);
. V% z$ K& m& Q8 u // Convert the MD5 result to Hexadecimal string
* T+ Q6 F9 v6 C m1 w! f' @: {: {6 M% @9 `. ^) u6 G8 ?3 A
string MD5Password = BinaryToHex(result);
5 B2 u* `; O2 \' w- I string aa = "";$ f! W1 Z3 V* R
}[/mw_shl_code]
1 i2 D. C; Q# y[mw_shl_code=csharp,true]private String BinaryToHex(byte[] BinaryArray)
" v: e3 H4 @: m* D. G" b {
7 h9 J6 R) w- M3 F* G7 ^# |" ] string result = "";
{# J* ^1 b" _$ [6 { long lowerByte;
) o% e0 b* {, Q4 D( p' S% x long upperByte;
9 v3 O& v. @$ @& X7 d r9 N4 ]! Y. }$ n
foreach (Byte singleByte in BinaryArray)/ a$ A( o) C& N7 n
{0 ?! M) j, c4 }/ e
lowerByte = singleByte & 15;7 B' U# k' t- N7 F5 c, i7 t6 B) l
upperByte = singleByte >> 4;
4 c \0 e0 O' I
9 C1 g1 J" S9 C result += NumberToHex(upperByte);
/ {& y3 s( a d M/ B" O result += NumberToHex(lowerByte);
$ o: |- i( d9 ?% }% m6 F0 F }' x5 n+ e1 _8 o
return result;% G7 C! k5 D+ z9 V. J. u' `
}[/mw_shl_code]
) u8 F4 N9 }- a1 b& u[mw_shl_code=csharp,true]private static char NumberToHex(long Number), \/ N# R; v, j5 D
{
- ~6 c% u+ N' v if (Number > 9)
6 _ ]4 J. W5 K% `0 W, P" \ return Convert.ToChar(65 + (Number - 10));& u/ P8 u, Z2 p p
else; h9 j: m& o, u
return Convert.ToChar(48 + Number);! n5 G8 G |- p4 v" U
}[/mw_shl_code] % ]) [& L9 j: [' u5 @! g
|