MD5加密算法在我们做网站开发的时候用过的很多,首先用户的密码我们每次都是要加密存进数据库。
其实在C#中实现对数据(字符串)的MD5加密是非常简单的。
using System.Security.Cryptography;
public string Md5(string str)
{
MD5 md5 = new MD5CryptoServiceProvider();
byte[] data = md5.ComputeHash(UnicodeEncoding.Default.GetBytes(str));
StringBuilder strBuilder = new StringBuilder();
for (int i = 0; i < data.Length; i++)
{
strBuilder.Append(data.ToString("x2"));
}
return strBuilder.ToString();
}
这样返回的是32位的字符串。
但是我们在查看别人的
数据库数据的时候有是会发现PASS
word是16位的。
这是这样计算的:
md5计算(admin)=2123 2f29 7a57 a5a7 4389 4a0e 4a80 1fc3;
16=7a57 a5a7 4389 4a0e;其实是在32位的加密的基础上取了它的重第9位到24位。即substring(8,16)。
其实还有一个就是我在查看别人
数据库的时候发现有40位的(主要是各大破解MD5的网站太多了,MD5加密已经没有那么
安全了,所以有些人又变换出来了40位的。其实一看40位的也很简单,变换的不复杂。):
我们一起开看看它是怎么运算的:
40位的:7a57 a5a7 4389 4a0e 4a80 1fc3 4389 4a0e 4a80 1fc3
前面16位:即是MD516位的加密7a57 a5a7 4389 4a0e。
剩下的24位:4a80 1fc3 4389 4a0e 4a80 1fc3
不难发现:4a80 1fc3=MD532位加密的后8位+ 4389 4a0e=MD516位加密的后8位+4a80 1fc3=MD532位加密的后8位。
所以这核心就是保存了前面16位。有了这16位就可以保证数据的正确性,至于后面的都是迷惑
大家用的。其实也可以进行其他各种的变换。如我对它(admin)进行16加密只后把它首位分开放置.然后中间在按照自己的算法放置字符串。产生一个40位的密码。
为什么会这样说呢?
其实现在的SQL注入还是很严重的。万一我们的网站做的出现了注入
漏洞的话,被某些HACKER(脚本小孩),拿到了帐号密码之后,一看是40位的。它就开始蒙了。心想这是什么加密,(其实加密的算法有很多哦。)百度之后呵呵抱歉这是你自己想的一个。这样就可以避免了一些威胁。不是吗?
还有就是自己的密码长度格式:在13位左右-有数字,字母,大小写,以及@字符
例如:Aiao
qq@91b91b
这是我的一个密码的规范:在@之前的密码用字母表示第一个和最后一个都大写
@之后都用数字但是出现了8我就替换成b.
也很好记住:xiaoqq我的昵称,918我的生日重复一次。遇到8=b.
呵呵希望这篇文章对某些人有帮助。