加解密:防止被拦截看到敏感信息
身份认证:防止伪造 签名
不可逆的加密技术
不可逆加密技术不能用于传输数据,一般用于用户注册,对用户的密码加密
只能加密不能解密,常见算法md5,用户注册加密不能解密,使用场景对密码比对。
明文+MD5+盐值
只能加密不能解密
可逆的加密技术
既可以加密也可以解密
对称的可逆加密技术
加密和解密的秘钥都是同一个
典型代表 AES DES 一个秘钥加解密,双方先交换秘钥,交换完之后知道是哪一个。这个适合自己系统,比如自己用户密码进行加密。比如配置选项,yml,数据库账户密码加密。
但是都已经是自己的系统,那为什么要给自己加密,莫名其妙。
这个不安全,因为秘钥拦截怎么办
不能用于外部系统之间远程调用
如何对自己yml中mysql 账号和密码加密,网上一搜就搜得到。
导包
导工具类
自己把明文密码转成加密后的
放到yml中就可以了
配置秘钥和加解密算法
解密后的密码重新设置给datasourse
修改数据库的配置文件内容信息
非对称的可逆加密技术
一个公钥,一个私要
典型RsA
加密和解密分开,公钥加密,私钥解密。
加密和解密秘钥不是同一个
比如自己的服务,有自己的公钥和私钥
支付宝有它的公钥和私钥
双方交换对方的公钥,私钥不会交换,都自己保存。
自己服务拥有了支付宝的公钥
支付宝有了自己服务的公钥
自己服务使用对方的公钥进行加密,有加密字符串
加密后的字符串传过去,支付宝使用支付宝私钥解密。
支付宝返数据加密也是用自己服务的公钥进行加密,我们用自己的私钥进行解密。
假如中途拦截的话,又没有私钥,所以是无法解密的。
如果有人伪造自己的服务向支付宝发起请求。
解决方案:在自己的服务对自己的私钥进行加签,再使用对方的公钥进行加密。沃日,双层加密。
支付宝就要:利用对方公钥验签,解密成功,是对方发过来的,所谓验签,使用对方公钥进行解密,没报错,是对方发过来的请求。使用自己的私钥对参数进行解密。
就是双层加密,双层解密。
如果有人问你,你的数据在各个服务如何保障安全。
内部调用无所谓,外部请求,在网关进行出去,如果敏感信息就非对称加密算法
外部请求通过https,保障安全
https底层就是对称加密或者非对称加密
客户端 HTTPS的服务器必须要有一套数字证书,花点钱申请,或者自己制作,证书就是公钥
这是比较简单,详细的可以网上搜一搜
证书就是公钥
双方传输证书
客户端解析证书,用公钥加密随机值
传输加密信息
服务端解析加密信息