MD5全称:message-digest algorithm 5
翻译过来就是:信息 摘要 算法 5
特点
- 长度固定:
不管多长的字符串,加密后长度都是一样长
作用:方便平时信息的统计和管理 - 易计算:
字符串和文件加密的过程是容易的.
作用: 开发者很容易理解和做出加密工具 - 细微性
一个文件,不管多大,小到几k,大到几G,你只要改变里面某个字符,那么都会导致MD5值改变.
作用:很多软件和应用在网站提供下载资源,其中包含了对文件的MD5码,用户下载后只需要用工具测一下下载好的文件,通过对比就知道该文件是否有过更改变动. - 不可逆性
你明明知道密文和加密方式,你却无法反向计算出原密码.
作用:基于这个特点,很多安全的加密方式都是用到.大大提高了数据的安全性
关于撞库破解
这是概率极低的破解方法,原理就是:
-
建立一个大型的数据库,把日常的各个语句,通过MD5加密成为密文,不断的积累大量的句子,放在一个庞大的数据库里.
-
比如一个人拿到了别人的密文,想去查询真实的密码,就需要那这个密文去到提供这个数据库的公司网站去查询.
这就是撞库的概念.
关于MD5加盐
比如我的银行密码是”12345”
- 得到的MD5是:827ccb0eea8a706c4c34a16891f84e7b
- 一个人截取到这个密文,那么通过撞库肯定容易撞出12345.
- 我们要做的就是加盐
每次保存密码到数据库时,都生成一个随机16位数字,将这16位数字和密码相加再求MD5摘要,然后在摘要中再将这16位数字按规则掺入形成一个48位的字符串保存在数据库中
在验证密码时再从48位字符串中按规则提取16位数字,和用户输入的密码相加再MD5。按照这种方法形成的结果肯定是不可直接反查和撞库的,且同一个密码每次保存时形成的摘要也都是不同的。
算法原理
对md5算法简要的叙述可以为:md5以512位分组来处理输入的信息,且每一分组又被划分为16个32位子分组,经过了一系列的处理后,算法的输出由四个32位分组组成,将这四个32位分组级联后将生成一个128位散列值。
具体实现参考此链接