加密算法在用户鉴权方面的应用

加密技术在用户鉴权方面的应用

本次分享主要内容

  1. 什么是加密算法
  2. md5 是加密算法吗?
  3. 对称加密和非对称加密是什么及其优缺点和应用场景
  4. 加密算法在用户认证上的应用
  5. 加密算法在数据加密上的应用
  6. 加密算法在api 签名上的应用
  7. 总结分享内容

一、什么是加密算法

维基百科:在密码学中,加密(英语:Encryption)是将明文信息改变为难以读取的密文内容,使之不可读的过程。只有拥有解密方法的对象,经由解密过程,才能将密文还原为正常可读的内容。

百度百科:加密,是以某种特殊的算法改变原有的信息数据,使得未授权的用户即使获得了已加密的信息,但因不知解密的方法,仍然无法了解信息的内容。

综上所诉,可以看出加密需要满足两个条件

  1. 通过转换需要把明文(人能看得懂的信息) 转成 密文(人看不懂的信息);
  2. 可以通过某种算法将密文给转回来,与之前明文信息一致。

二、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/

三、对称加密和非对称加密的优缺点及各自的应用场景

对称加密:

对称加密.png

特点:加密和解密用的秘钥是一致的
优点:密码短,加密和解密速度慢,破译困难
缺点:
1 加密解密秘钥是一样的,双方之间的协商困难,通常只能通过邮件电话之类的沟通方式。这是不安全的。
2 每一对合作者都需要一对秘钥。导致每个人要保存大量的秘钥
3 对称加密不能提供信息完整性验证,无法验证发送者和接受者的身份。
4 对称秘钥的分发工作很危险和繁琐
应用场景:
代表算法:AES、DES、3DES、RC2、RC4、RC5

非对称加密:

非堆成加密.png

特点:公钥解密,私钥解密,加解密用户秘钥不同
优点: 分发简单,每个人只需要保证自己的私钥的安全性,就可以了,公钥可以随便公开。
缺点:
1.加密和解密速度慢,只适合对少量信息加密。
应用场景:非对称加密的应用非常多:传输信息,数字签名,身份验证
代表算法:RSA、DSA、ECC

加密算法的选择
1.由于非对称加密算法的运行速度比对称加密算法的速度慢很多,当我们需要加密大量的数据时,建议采用对称加密算法,提高加解密速度。
2.对称加密算法不能实现签名,因此签名只能非对称算法。
3.由于对称加密算法的密钥管理是一个复杂的过程,密钥的管理直接决定着他的安全性,因此当数据量很小时,我们可以考虑采用非对称加密算法。
4.在实际的操作过程中,我们通常采用的方式是:采用非对称加密算法管理对称算法的密钥,然后用对称加密算法加密数据,这样我们就集成了两类加密算法的优点,既实现了加密速度快的优点,又实现了安全方便管理密钥的优点。

四、加密算法在用户认上的应用

随着技术的发展,分布式web应用的普及,通过session管理用户登录状态成本越来越高,因此慢慢发展成为token的方式做登录身份校验,然后通过token去取redis中的缓存的用户信息,随着之后jwt的出现,校验方式更加简单便捷化,无需通过redis缓存,而是直接根据token取出保存的用户信息,以及对token可用性校验,单点登录更为简单。

基于token的鉴权机制

  1. 用户使用用户名密码或则第三方授权码来请求服务器
  2. 服务器进行验证用户的信息
  3. 服务器通过验证发送给用户一个token
  4. 客户端存储token,并在每次请求时附送上这个token值
  5. 服务端验证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 中的微信登录

  1. 客户端通过调用微信 sdk 接口,传递 app 的唯一标示,请求给 app 授权,微信将用户引导进入授权界面,界面中包含要授权的 app 和授予的用户权限。如图所示:


    微信登录.jpeg
  2. 当用户点击同意授权后,会触发客户端微信 sdk 的回调,然后给 app 返回授权的 code,然后 app 通过 code 进行微信登录。bytepower 的登录 api
  1. bytepower 后台需要向微信发送两次请求,第一次是通过 code 获取用户 access_token 和 open_id(微信用户在某个 app 中的唯一标识),然后通过 access_token 获取用户用户昵称和头像,然后通过 open_id 来判断在 bytepower 用户库是否存在,不存在则创建用户,存在则返回相关用户信息。

  2. 用户通过 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


参考文档:

  1. 讲一些生活中会遇到的事情来解释案例
  2. 阿斯顿发
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容