所有的加密算法都是基于二进制进行加密!!
为什么要加密:
1.不允许在网络上明文的传递用户稳私;
2.本地不允许明文的保存用户的稳私。
服务器要不要保存用户明文密码:
把密码明文保存在服务器本身就一种不安全的行为,保存加密后的密码就行了,当然这样也会带来个不好的结果,那就是用户忘记密码后,无法找回密码(因为服务器也不知道原密码是什么),只能重置密码!!!
最常见的是md5加密,简单的md5加密能保证安全不:
有一个神奇的网站,www.cmd5.com 这网站可以反编绎md5密码(暴力破解),可以破解一些简单的加密
md5虽然不可逆,但同样的数据,加密后都是不会变的,所以直接用md5加密是不安全的
早期的解决方案--加固定盐!!
盐:足够的长足够复杂的固定字符串
原密码拼接盐字符串再md5加密
开发者自己知道盐:(不安全撒,非技术问题)
盐一旦定义不好改
目前比较流行的一种加密解决方案---HMAC
使用一个密钥,对明文加密,并且做两次散列(哈希)
在真实的开发中,我们这个key是从服务器获取的!!!
流程:手机和服务器都保存key,
换手机登录时,判断本地有没有key,没有就找服务器要key
有可能找服务器要key不给的,比如qq的设备锁(要找原设备确认)
此时还存在一个漏洞:黑客可以获取加密后的密码,进行登录
解决办法:
HMAC加密后,拼接当前年月日时分,加进行一次MD5加密
此时服务器也用HMAC加密后的密码拼接当前年月日时分,然后比较,如果失败可以减一分钟,再比较。此时黑客拦截到密码后,最多只有120s的时间,进行登录
本地时间可能存在不准的情况,最好用服务器时间。
md5:杂谈
md5可以区分视频图片正版盗版
两个文件复制的md5值是一样的,截剪的是不一样的
拆词搜索:核心---词语对比
a:百度-阿里-腾讯
b:阿里-腾讯-百度
在终端中md5词语 md5 -s ***
将各个词md5,然后接位相加,a 和 b的结果是一样的。
钥匙串访问:开SSKeychain
用于保存密码等隐私信息
<跨沙盒!!存在系统里面,在沙盒中是找不到的>
如果我们存了一个密码,然后用户删除了APP,再下载APP,密码还在
采用原理:AES加密
第三方工具:KeyChain Sharing
高级加密算法的运用(高级程序员的话题)
密码学:军事!!!
哈希算法-信息摘要
得到的数据只是原数据的一部分,所以不可逆
MD5
SHA1
SHA256/512
HMAC
散列碰撞:破解哈希 --找出两个不同的数据,然后加密之后得到相同的结果!!
两个数据加密后得到一个值的可能是有的,个数也是无限多的。
因为加密后的数据是32位,是有限的,而被加密的数据种类是无限的。
但是计算量也是无限大的。
以下两种加密算法都是能够反算的!!!
对称加密算法:传统加密算法key
*明文—->加密 ——>密文
*密文—->解密——>明文
非对称加密算法(RSA):现代加密算法
*公钥 ——私钥
*用公钥加密,用私钥解密
*用私钥加密,用公钥解密
用公钥加密后,连拥有公钥本身的人都不能解密
暴力破解DES,超级计算机50年
暴力破解AES,大概几千w年吧