代码结构3. 加解密⼯具核⼼类:AesEncryptUtil.java
代码已传git
⾮对称加密算法思路
这个留给⼤家⾃⼰去动⼿实践,思路如下:springboot推荐算法
1、客户端启动,发送请求到服务端,服务端⽤RSA算法⽣成⼀对公钥和私钥,我们简称为publickey1,privatekey1,将公钥publickey1返回给客户端。
2、客户端拿到服务端返回的公钥publickey1后,⾃⼰⽤RSA算法⽣成⼀对公钥和私钥,我们简称为publickey2,privatekey2,并将公钥publickey2通过公钥publickey1加密,加密之后传输给服务端。
3、此时服务端收到客户端传输的密⽂,⽤私钥privatekey1进⾏解密,因为数据是⽤公钥publickey1加密的,通过解密就可以得到客户端⽣成的公钥publickey2
4、然后⾃⼰在⽣成对称加密,也就是我们的AES,其实也就是相对于我们配置中的那个16的长度的加密key,⽣成了这个key之后我们就⽤公钥publickey2进⾏加密,返回给客户端,因为只有客户端有publickey2对应的私钥privatekey2,只有客户端才能解密,客户端得到数据之后,⽤privatekey2进⾏解密操作,得到AES的加密key,最后就⽤加密key进⾏数据传输的加密
加签验签概念
加签:
⽤Hash函数把原始报⽂⽣成报⽂摘要,然后⽤私钥对这个摘要进⾏加密,就得到这个报⽂对应的数字签名。通常来说呢,请求⽅会把「数字签名和报⽂原⽂」⼀并发送给接收⽅。
验签:
接收⽅拿到原始报⽂和数字签名后,⽤同⼀个Hash函数从报⽂中⽣成摘要A。另外,⽤对⽅提供的公钥对数字签名进⾏解密,得到摘要B,对⽐A 和B是否相同,就可以得知报⽂有没有被篡改过。
验签
这⾥以简单的md5为例:
将请求参数中的各个键值对按照key的字符串顺序升序排列(⼤⼩写敏感),把key和value拼成⼀串之后最后加上密钥,组成
key1value1key2value2PRIVATEKEY的格式,转成utf-8编码的字节序列后计算md5,作为请求的签名。计算出来的签名串应当全为⼩写形式。如果某个参数的值为空,则此参数不参与签名。
例如,C为客户端,S为服务器端。C向S发出请求,C传的参数有A=a,B=b,C=c,除此之外,还需要传递⼀个签名摘要参数sign。sign =
md5(AaBbCc+PRIVATEKEY) 其中+表⽰字符串连接,md5算法,可以替换为⼀些更为复杂的签名算法,其中PRIVATEKEY是双⽅商定好的私钥.
服务器端⽤同样的⽅法来进⾏签名验证。这⾥最好加上timestamp时间戳和nonce随机字符串。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。