一、定义:将任意长度的消息压缩到某一固定长度的消息摘要的函数,MD5与SHA1都是Hash算法(散列函数),均属于不可逆算法
二、区别
1、MD5输出128位,SHA1输出是160位
2、MD5比SHA1快
3、安全性:SHA1比MD5更安全
三、MD5、SHA1功能
1、文件校验功能:证明某段信息没有被修改;校验信息是否被更改,又被称为文件指纹
2、消息认证:密码验证,证明你确实知道某个密码
四、MD5、SHA1漏洞
例如我知道'password'的MD5值是5f4dcc3b5aa765d61d8327deb882cf99,那么我就用一个数据库存起来,只要我看到5f4dcc3b5aa765d61d8327deb882cf99,我就知道这个是口令'password‘使用MD5处理之后的值
解决数据库反查办法:针对每一个用户U,生成一个随机值Salt,并且在以后永远保持不变,任意两个用户的盐不能相同。然后当用户设置密码的时候,根据明文密码P,计算MD5(P+Salt)=C。而登录的时候用户也给出明文密码P',服务器拿到之后同样计算MD5(P'+Salt)=C',看C'是否等于C
加盐是为了防止攻击者直接用预先计算好 md5 的字典与密文进行匹配查找明文,因为如果用户密码是字典中的条目,添加随机后缀之后几乎不会出现在字典中,攻击者无从构建彩虹表。
针对每一个用户的盐,比如aaaa,分别根据弱密码明文库,计算MD5(弱密码明文+aaaa)=盐aaaa对应的散列值,然后再用这个密码库去对用户A进行生日攻击。对用户B还得重新根据新的盐bbbb生成密码库
4、数据加密:将用户设置的密码进行md5运算后存储至数据库
5、通讯安全
通讯安全,是对数据校验的一种升级应用。
例子:表单提交时,无论get或post方法,在提交时都会以明码的方式进行提交,很不安全
四、RSA加密
对称加密:加密解密都用同一个密钥
非对称加密:发送方用公钥加密数据,接收方用私钥解密数据
RSA属于公钥加密,非对称加密,速度慢,只能处理少量数据
五、RSA应用
1、公钥加密体制:保密性,公钥加密,私钥解密
2、认证,比如数字签名,即私钥持有者对信息进行签名,验证者可以根据公开的公钥进行验证签名是否正确和有效,即实现了认证性,以及不可抵赖性。
3、rsa加密/解密
生成RSA公私钥对 -- 保存公钥 -- 输入信息用公钥加密 -- 传输密文 -- 将密文用rsa公钥解密,获得明文信息
4、rsa加密/解密/签名/验证
5、访问和远程访问安全
6、交易安全
7、消费者身份保护
8、登陆和交易认证
六、程序中应用
向后台传输数据时,后台生成公钥及私钥,将公钥传给前台,前台将数据放入公钥中,后台通过私钥解密,将数据使用md5/sha1加密放入数据库