发表于: 2017-11-05 15:08:58

2 655


今天完成的内容:

(1)了解MD5加密。

MD5的全称是Message-Digest Algorithm 5,MD5算法是典型的消息摘要算法,其前身有MD2、MD3和MD4算法,它由MD4、MD3和MD2算法改进而来。不论是哪一种MD加密算法,它们都需要获得一个随机长度的信息并产生一个128位的信息摘要。如果将这个128位的二进制摘要信息换算成十六进制,可以得到一个32位的字符串,因此我们加密完成后的16进制的字符串长度为32位。

md5可以将一个字符串,或文件,或压缩包,执行md5后,就可以生成一个固定长度为128bit的串。这个串,基本上是唯一的。

加密后的消息是完整的;具有解密算法,得到原始数据;摘要得到的消息是不完整的;通过摘要的数据,不能得到原始数据。

md5的长度,默认为128bit,也就是128个0和1的二进制串。这样表达并不友好,所以将二进制转成了16进制,每4个bit表示一个16进制,

所以128/4 = 32 换成16进制表示后,为32位了。

md5是不可逆的,也就是没有对应的算法,从生产的md5值逆向得到原始数据,只能暴力破解。

(2)加盐加密。

加盐加密是一种对系统登录口令的加密方式,它实现的方式是将每一个口令同一个叫做”盐“(salt)的n位随机数相关联。无论何时只要口令改变,随机数就改变。随机数以未加密的方式存放在口令文件中,这样每个人都可以读。不再只保存加密过的口令,而是先将口令和随机数连接起来然后一同加密,加密后的结果放在口令文件中。

所谓加Salt方法,就是加点“佐料”。其基本想法是这样的:当用户首次提供密码时(通常是注册时),由系统自动往这个密码里撒一些“佐料”,然后再散列。而当用户登录时,系统为用户提供的代码撒上同样的“佐料”,然后散列,再比较散列值,已确定密码是否正确。这里的“佐料”被称作“Salt值”,这个值是由系统随机生成的,并且只有系统知道。这样,即便两个用户使用了同一个密码,由于系统为它们生成的salt值不同,他们的散列值也是不同的。

 下面详细介绍一下加Salt散列的过程。介绍之前先强调一点,前面说过,验证密码时要使用和最初散列密码时使用“相同的”佐料。所以Salt值是要存放在数据库里的。

用户注册时,

用户输入【账号】和【密码】(以及其他用户信息);

系统为用户生成【Salt值】;

系统将【Salt值】和【用户密码】连接到一起;

对连接后的值进行散列,得到【Hash值】;

将【Hash值1】和【Salt值】分别放到数据库中。

用户登录时,

用户输入【账号】和【密码】;

系统通过用户名找到与之对应的【Hash值】和【Salt值】;

系统将【Salt值】和【用户输入的密码】连接到一起;

对连接后的值进行散列,得到【Hash值2】(注意是即时运算出来的值);

比较【Hash值1】和【Hash值2】是否相等,相等则表示密码正确,否则表示密码错误。

有时候,为了减轻开发压力,程序员会统一使用一个salt值(储存在某个地方),而不是每个用户都生成私有的salt值。

1、关于加盐值的一些信息。

什么是加盐值?

为了加强MD5的安全性(本身是不可逆的),从而加入了新的算法部分即加盐值,加盐值是随机生成的一组字符串,可以包括随机的大小写字母、数字、字符,位数可以根据要求而不一样,使用不同的加盐值产生的最终密文是不一样的。

2、代码中如何使用加盐值?

由于使用加盐值以后的密码相当的安全,即便是你获得了其中的salt和最终密文,破解也是一个耗费相当多时间的过程,可以说是破解单纯MD5的好几倍,那么使用加盐值以后的密文是如何产生的呢?

1).首先我们得到的是明文的hash值

2).进行计算获取MD5明文hash值

3).随机生成加盐值并插入

4).MD5插入加盐值得到的hash

5).得到最终的密文

3、 含加盐值MD5算法的应用

目前多家的网站程序公司都已经加入了该算法,如常见的VBB论坛、discuz论坛等都采用了,甚至著名的Linux开源操作系统早已经加入了这种加密模式。可得而知,这种算法势必会在未来应用于更多的范围。

明天的计划:学习token和cookie。

遇到的问题:算法方面有点不懂。

收获:以上。

禅道:http://task.ptteng.com/zentao/task-view-10684.html


返回列表 返回列表
评论

    分享到