加密技术在用户鉴权方面的应用
本次分享主要内容
- 什么是加密算法
- md5 是加密算法吗?
- 对称加密和非对称加密是什么及其优缺点和应用场景
- 加密算法在用户认证上的应用
- 加密算法在数据加密上的应用
- 加密算法在api 签名上的应用
- 总结分享内容
一、什么是加密算法
维基百科:在密码学中,加密(英语:Encryption)是将明文信息改变为难以读取的密文内容,使之不可读的过程。只有拥有解密方法的对象,经由解密过程,才能将密文还原为正常可读的内容。
百度百科:加密,是以某种特殊的算法改变原有的信息数据,使得未授权的用户即使获得了已加密的信息,但因不知解密的方法,仍然无法了解信息的内容。
综上所诉,可以看出加密需要满足两个条件
- 通过转换需要把明文(人能看得懂的信息) 转成 密文(人看不懂的信息);
- 可以通过某种算法将密文给转回来,与之前明文信息一致。
二、Md5 算法是加密算法吗?
MD5 即 Message-Digest Algorithm 5(信息-摘要算法5),用于确保信息传输完整一致。是计算机广泛使用的杂凑算法之一,主流编程语言普遍已有 MD5 实现。
将数据(如汉字)运算为另一固定长度值,是杂凑算法的基础原理,MD5 的前身有 MD2 、MD3 和 MD4 。
MD5 是输入不定长度信息,输出固定长度 128-bits 的算法。经过程序流程,生成四个32位数据,最后联合起来成为一个 128-bits 散列。
基本方式为,求余、取余、调整长度、与链接变量进行循环运算,得出结果。
MD5 计算广泛应用于错误检查。在一些 BitTorrent 下载中,软件通过计算 MD5 来检验下载到的碎片的完整性。
也就是说,MD5 算法和加密算法都可以将信息转换为另外一种内容。MD5 算法对比 加密算法 缺少了解密过程。事实上,使用 加密算法 加密后的消息是完整的,并且基于解密算法后,可以恢复原始数据。而 MD5 算法 得到的消息是不完整的,并且通过摘要的数据也无法得到原始数据。所以,MD5 算法不是加密算法
md5 真的就不能解密吗?
md5在线加密:http://tool.chinaz.com/tools/md5.aspx
md5在线解密:https://www.cmd5.com/
三、对称加密和非对称加密的优缺点及各自的应用场景
对称加密:
特点:加密和解密用的秘钥是一致的
优点:密码短,加密和解密速度慢,破译困难
缺点:
1 加密解密秘钥是一样的,双方之间的协商困难,通常只能通过邮件电话之类的沟通方式。这是不安全的。
2 每一对合作者都需要一对秘钥。导致每个人要保存大量的秘钥
3 对称加密不能提供信息完整性验证,无法验证发送者和接受者的身份。
4 对称秘钥的分发工作很危险和繁琐
应用场景:
代表算法:AES、DES、3DES、RC2、RC4、RC5
非对称加密:
特点:公钥解密,私钥解密,加解密用户秘钥不同
优点: 分发简单,每个人只需要保证自己的私钥的安全性,就可以了,公钥可以随便公开。
缺点:
1.加密和解密速度慢,只适合对少量信息加密。
应用场景:非对称加密的应用非常多:传输信息,数字签名,身份验证
代表算法:RSA、DSA、ECC
加密算法的选择
1.由于非对称加密算法的运行速度比对称加密算法的速度慢很多,当我们需要加密大量的数据时,建议采用对称加密算法,提高加解密速度。
2.对称加密算法不能实现签名,因此签名只能非对称算法。
3.由于对称加密算法的密钥管理是一个复杂的过程,密钥的管理直接决定着他的安全性,因此当数据量很小时,我们可以考虑采用非对称加密算法。
4.在实际的操作过程中,我们通常采用的方式是:采用非对称加密算法管理对称算法的密钥,然后用对称加密算法加密数据,这样我们就集成了两类加密算法的优点,既实现了加密速度快的优点,又实现了安全方便管理密钥的优点。
四、加密算法在用户认上的应用
随着技术的发展,分布式web应用的普及,通过session管理用户登录状态成本越来越高,因此慢慢发展成为token的方式做登录身份校验,然后通过token去取redis中的缓存的用户信息,随着之后jwt的出现,校验方式更加简单便捷化,无需通过redis缓存,而是直接根据token取出保存的用户信息,以及对token可用性校验,单点登录更为简单。
基于token的鉴权机制
- 用户使用用户名密码或则第三方授权码来请求服务器
- 服务器进行验证用户的信息
- 服务器通过验证发送给用户一个token
- 客户端存储token,并在每次请求时附送上这个token值
- 服务端验证token值,并返回数据
基于 jwt 的鉴权机制
字段 | 解释 | 示例 |
---|---|---|
header | jwt头部,说明类型加密算法 | {"type":"JWT","alg":"HS256"} |
payload | jwt 载荷,存储一些数据信息 | {"exp":"","uid":"aaaaa"} |
signature | jwt 签名 |
signature = alg(base64(header) + "." + base64(payload), secret)
jwt = base64(header).base64(payload).signature
bpserver 中的微信登录
-
客户端通过调用微信 sdk 接口,传递 app 的唯一标示,请求给 app 授权,微信将用户引导进入授权界面,界面中包含要授权的 app 和授予的用户权限。如图所示:
微信登录.jpeg - 当用户点击同意授权后,会触发客户端微信 sdk 的回调,然后给 app 返回授权的 code,然后 app 通过 code 进行微信登录。bytepower 的登录 api
bytepower 后台需要向微信发送两次请求,第一次是通过 code 获取用户 access_token 和 open_id(微信用户在某个 app 中的唯一标识),然后通过 access_token 获取用户用户昵称和头像,然后通过 open_id 来判断在 bytepower 用户库是否存在,不存在则创建用户,存在则返回相关用户信息。
用户通过 token 来使用 bytepower 的服务
五、加密算法在api 签名和数据加密上的应用
请求加密
选择 AES 加密
并做接口演示
六. 加密算法在api 签名上的应用
010 + 060 直接对外的服务
userModel = &users.UsersModel{
UserId: uid,
UserToken: uuid.RandStringRunes(32)
}
func RandStringRunes(n int) string {
b := make([]rune, n)
for i := range b {
b[i] = letterRunes[rand.Intn(len(letterRunes))]
}
return string(b)
}
var letterRunes = []rune("******/这是加密的字段字符集***********//")
文档编写基本思路:导入,新授,巩固,小结,作业
参考文档:
https://blog.csdn.net/weixin_28774815/article/details/81359015
https://blog.csdn.net/kexuanxiu1163/article/details/104980769
参考文档:
- 加密算法的应用
- 基于RSA加密算法身份认证方案的设计
- 深入浅出用户认证鉴权---使用非对称加密算法加密登录
- OAuth2
- api签名
-
api调用签名总结
https://blog.csdn.net/u010889990/article/details/103374808
https://blog.csdn.net/u013762572/article/details/88733982
https://blog.csdn.net/liudongdong19/article/details/82217431
jwt对比token
文档灵感:
- 讲一些生活中会遇到的事情来解释案例
- 阿斯顿发