|
MD5加密算法在我们做网站开发的时候用过的很多,首先用户的密码我们每次都是要加密存进数据库。 其实在C#中实现对数据(字符串)的MD5加密是非常简单的。, J& b: f4 s7 U4 p% }3 f- b
引用using System.Security.Cryptography;
5 ]# u1 S* f1 {: g. x2 \6 d( E5 upublic string Md5(string str)
- J- k- E. l7 ^ i" M0 E, R2 p{
: d6 Y6 i4 N8 B! c4 T7 X0 l+ Q2 {MD5 md5 = new MD5CryptoServiceProvider();% I1 G/ p% d; b: d& g/ K/ u$ D4 s
byte[] data = md5.ComputeHash(UnicodeEncoding.Default.GetBytes(str));
' E( A( Z1 A: n1 a3 b1 oStringBuilder strBuilder = new StringBuilder();
$ K$ U4 i* d, K5 L' i& Zfor (int i = 0; i < data.Length; i++), t$ h$ a, ~9 N+ k6 k4 o
{6 z. q9 N: \9 C; p& m
strBuilder.Append(data.ToString("x2"));6 l8 c0 u7 i( g7 l- F; w
}# f# m. o8 y8 k( f% |# h( C
return strBuilder.ToString();! H4 v: ^& X$ V' N# l) N
}/ C T( Z. Y( [' T& B
这样返回的是32位的字符串。
; Y/ T) O9 @7 Z1 T) U但是我们在查看别人的数据库数据的时候有是会发现PASSWORD是16位的。' f3 K4 [9 G5 k) y1 q/ p- c
这是这样计算的:
) w j+ M6 J3 F* r8 J# i( ?md5计算(admin)=2123 2f29 7a57 a5a7 4389 4a0e 4a80 1fc3;0 d6 @. b ^$ {5 [* t& E( E
16=7a57 a5a7 4389 4a0e;其实是在32位的加密的基础上取了它的重第9位到24位。即substring(8,16)。! {* V( x- y) }5 F5 F) q
其实还有一个就是我在查看别人数据库的时候发现有40位的(主要是各大破解MD5的网站太多了,MD5加密已经没有那么安全了,所以有些人又变换出来了40位的。其实一看40位的也很简单,变换的不复杂。):; |- w3 }8 K+ u2 F# {' Z
我们一起开看看它是怎么运算的:2 Z3 G- Z7 c- D5 O% A# B ?
40位的:7a57 a5a7 4389 4a0e 4a80 1fc3 4389 4a0e 4a80 1fc3' ^( r2 ]+ \5 \; {) x8 {$ C
前面16位:即是MD516位的加密7a57 a5a7 4389 4a0e。( L f0 v* @ H& {
剩下的24位:4a80 1fc3 4389 4a0e 4a80 1fc36 q- j$ G- \3 ^7 j* @' k( ~4 o- N
不难发现:4a80 1fc3=MD532位加密的后8位+ 4389 4a0e=MD516位加密的后8位+4a80 1fc3=MD532位加密的后8位。
2 E9 x" e O6 D' E9 W. C所以这核心就是保存了前面16位。有了这16位就可以保证数据的正确性,至于后面的都是迷惑大家用的。其实也可以进行其他各种的变换。如我对它(admin)进行16加密只后把它首位分开放置.然后中间在按照自己的算法放置字符串。产生一个40位的密码。9 v# y: j2 T% S7 o0 L: p: p% f
为什么会这样说呢?
2 F" Q9 ]9 ^0 ?3 ^. D" `5 q+ t其实现在的SQL注入还是很严重的。万一我们的网站做的出现了注入漏洞的话,被某些HACKER(脚本小孩),拿到了帐号密码之后,一看是40位的。它就开始蒙了。心想这是什么加密,(其实加密的算法有很多哦。)百度之后呵呵抱歉这是你自己想的一个。这样就可以避免了一些威胁。不是吗?3 m) q! v/ X; L& a
还有就是自己的密码长度格式:在13位左右-有数字,字母,大小写,以及@字符
' {9 i) n- y2 @" l1 n# h: y例如:AiaoqQ@91b91b# K9 n9 Q; M' v+ u
这是我的一个密码的规范:在@之前的密码用字母表示第一个和最后一个都大写
3 L F2 H9 s7 t6 o@之后都用数字但是出现了8我就替换成b.5 b2 F) j* c3 J. q3 }9 p- C
也很好记住:xiaoqq我的昵称,918我的生日重复一次。遇到8=b.+ E2 b! j2 K( |7 o
呵呵希望这篇文章对某些人有帮助。
) V9 t/ y3 }5 a |