通信安全是现在APP安全的重中之重,所以参考他人总结了关于密码校验的策略
通常有几种校验方式保证密码的安全
- md5
- md5 + 盐
- hmac
- 非对称加密 RSA
以上加密方式的优缺点
第一种 : 单纯的md5安全性很低,虽然不可逆,但是可以通过反查询得到原密码,如果我们从客户全送去的密码是md5的,那根本不需要知道原密码,就可以进行仿登录.
第二种 : 盐可以增加密码的复杂度,如果我们的盐是定义在项目中就有可能被逆向找出来,一旦盐被找出来,基本就废了,
现在我们讨论hmac是否可以将泄密的风险降低
- 我们可以定义私钥key, 怎么定义
- 在注册用户的时候,每个用户都定义一个不同的key,作为密码校验的秘钥,
- 登录的时候先从服务器校验账号的有效性,一旦有效就返回秘钥key
- 保证秘钥key的安全性,可以将秘钥key进行RSA加密(RSA安全性高,但是性能差,效率低,适合小量的数据加密)
- 在进行思考一下,在客户端传递密码时始终是32位字符,黑客依然可以模拟登陆
- 那将密码设置成具有时间有效性的密码
- 在获取账号有效性的同时返回服务端时间,一定是服务器时间(yyyy-MM-dd HH:mm) 具体到分,
- 将用hmac加密的密码 跟服务器时间进行拼接再次进行md5加密,
- 服务器验证:当前服务器时间验证 + 上一分钟时间验证
- 即使拦截了我们的密码,密码的有效性只有两分钟,
- 即使秘钥被拦截,那也只是一个用户的秘钥被盗,影响的是一个用户,不会大规模密码被盗
第四种:RSA安全性高但是效率低性能差,适合关键字段的加密
介绍几种终端命令
md5 -s "string" #字符串md5
md5 filepath # 文件路径
ehco -n "string" | openssl sha -sha1
在自己的设备上获取公钥私钥,OpenSSL是非常强大的密码库
#获取私钥
openssl genrsa -out private.pem 512
#获取公钥
openssl rsa -in private.pem -out public.pem -pubout
#我们可以打开私钥公钥内容
openssl rsa -in private.pem -text -out private.txt