请使用QQ关联注册PLM之家,学习更多关于内容,更多精彩原创视频供你学习!
您需要 登录 才可以下载或查看,没有账号?注册
x
MD5算法简单的来说就是把任意长度的字串变换成固定长度(通常是128位)的16进制串。RFC 1321定义了MD5算法。! K; L/ m% D! z( H" e. x8 _* R% A/ \
MD5的用途主要有:
. g5 A9 V! C: L9 M一致性验证。比如我们从网上下载了某个文件,网站上一般会给出该文件的MD5值,我们下载下来后,可以利用工具计算出
9 M+ R" M3 K& T2 N V( [2 V新的MD5值,与正确的MD5值进行对照,如果不一样,则可以断定该文件下载出错或被篡改了。3 A6 W4 P$ x! I+ f X$ f$ Q9 Q) a2 v
数字签名。可以用MD5算法对发布的程序或发布的消息生成MD5值作为签名等。
) m. r* n$ F6 i0 F! x0 c密码存储。在传输过程中或存储过程中,直接用明文的密码都是很危险的。可以在传输之前先用MD5加密,存储也不用存储
$ |* `* v( K+ Q. g/ s3 H明文,可以直接存储MD5值。在验证时,先把输入的密码转换成MD5值再与存储值进行对比。 对于密码存储,Asp.net的实现方法为:
8 R* r. @, N9 [+ T7 X[mw_shl_code=csharp,true]protected void Page_Load(object sender, EventArgs e)% \& v1 R# N5 k. L- f* b: v
{
! Q: g n" q0 J' K& N* X) Q string plainPassword = "innovator";1 D: J9 C, ?" V3 A
E3 S% h( l4 D7 [; |4 ` System.Security.Cryptography.MD5 md5 = new System.Security.Cryptography.MD5CryptoServiceProvider();
' s3 F: b3 [! c( P! f/ B System.Text.ASCIIEncoding ascii = new System.Text.ASCIIEncoding();2 W j# w9 Q. t
byte[] data = ascii.GetBytes(plainPassword);# D [0 s8 q- V
byte[] result = md5.ComputeHash(data);
1 j5 j/ ~6 A8 y4 X( g // Convert the MD5 result to Hexadecimal string: K: X( a+ Q- c) o( k7 [
# f; b Q8 o: l7 e string MD5Password = BinaryToHex(result);
# V4 C$ Y3 j1 q string aa = "";
. |: V8 m3 e. ~0 T. [1 t4 E }[/mw_shl_code] 3 T6 L3 ~$ x5 ~' c3 W! G; [
[mw_shl_code=csharp,true]private String BinaryToHex(byte[] BinaryArray)
. A4 r6 ?& m: n# q2 [+ S! ^ {, H$ r4 D' n1 S, l: Z2 W
string result = "";
7 ~. I* Y3 b8 a long lowerByte;. A: V. r, F2 }7 n
long upperByte;
; f# }/ I3 k9 y# U0 j6 X- G- ?' g1 X, B' H4 K
foreach (Byte singleByte in BinaryArray)
/ t; p, }9 U& I( }+ L {
0 i7 F0 Y! p! T% n3 w, @ lowerByte = singleByte & 15;" |3 j. T2 l; z$ S! b; G
upperByte = singleByte >> 4;# t5 T# ^, A$ `) U8 l3 C+ u
( `5 V+ O) w! i* p
result += NumberToHex(upperByte);* S: S) ^& i- x
result += NumberToHex(lowerByte);9 b# `$ |$ m1 q: [+ f2 A8 U
}
7 P' V$ d6 |# S. y return result;) [. \, f; h: q: ~+ Q
}[/mw_shl_code]
2 n) F, _4 y( R$ ?[mw_shl_code=csharp,true]private static char NumberToHex(long Number)# r7 q9 d$ D V- Q
{
1 a0 h+ X9 C. D' C2 }% a/ I if (Number > 9)
$ A2 Z, B: r: \( g6 x return Convert.ToChar(65 + (Number - 10));1 V: V6 w6 }1 r' [1 ?; S
else) ]" ]4 R# c# @+ x) I: U. L) ?
return Convert.ToChar(48 + Number);
" Y. } W8 Y- E- |+ B# ` }[/mw_shl_code]
# @$ [8 ^7 Q! m" V |