加签验签模块早已作完了,从刚开始的一脸懵逼,到上线,前先后后两周多吧,如今整理一下思路,记录一下。算法
加签验签,发送消息方,对消息加签名;接受消息方,验证签名是否正确。工具
作加签验签的目的主要目的就是,验证消息的完整性加密
简单来讲,排序
发送消息方:字符串
一、根据消息内容造成摘要配置
二、根据摘要造成签名字段密码
三、发送消息tools
接受消息方:加密算法
一、接受消息证书
二、根据消息内容造成摘要
三、根据摘要去验证签名是否正确
上面讲的很粗略,这里咱们从整个过程来说解一下。
首先是环境:
发消息方A、接受消息方B、一个须要发送的消息段[merNo=001,user=zhangm,pwd=abc123,check=6387]、证书生成工具tools.jar
过程:
一、使用工具生成根证书,用户证书。
a. 填写工具配置信息。tools会根据消息交互双方的信息+密码生成两个证书,其中双方的信息不重要,重要的是密码。即:保存密码。
b. tools会生成一个密钥库,密钥库的密码是上一步设置的密码。而后tools还会生成一个密钥对,即公钥和私钥。而后将公钥和私钥存放到密钥库中。最后tools会生成两个证书文件:根证书【能够获得公钥和私钥】、用户证书【能够获得公钥】。
c. 获得咱们想要的东西:根证书、用户证书、密码。其中根证书与密码是一块儿的,由于从根证书中获得私钥是须要密码的。【注:公钥与私钥其实就是两个字符串】
二、管理证书
a. A保存根证书与密码,B保存用户证书。
三、发送消息
a. A经过消息[merNo=001,user=zhangm,pwd=abc123,check=6387]造成摘要,摘要的造成方式自行选择,通常来说是经过整个消息段作摘要。这里提供一个摘要造成方式:对三个消息字段的值进行一个自定义的排序,造成一个摘要,好比:摘要字段[abc123001zhangm6378],这是一种比较简单的摘要造成方式。复杂一点的有先对整个消息经过加密算法进行加密造成加密消息做为摘要。
b. A经过根证书与密码获得公钥和私钥
c. A经过公钥和私钥对摘要字段进行签名,造成签名字段。说白了,就是对上一步造成的摘要[abc123001zhangm6378]经过公钥和私钥造成一个加密的串。假设签名字段【加密串】为:w8y98hf。【实际会很长】。
d. A从新组装消息。将签名字段放到消息体中。[merNo=001,user=zhangm,pwd=abc123,check=6387,sign=w8y98hf]
e. A发送消息
四、接收消息
a. B接收消息
b. B根据merNo号去匹配对应的用户证书,而后从证书中拿到公钥。
c. B经过与A协定好的方式,经过消息字段生成摘要[abc123001zhangm6378]
d. B经过摘要字段[abc123001zhangm6378],公钥,签名字段sign=w8y98hf,去作验证是否正确。
本文仅仅是简单的说明了一下整个加签验签的思路,具体细节包括代码就不详细展现了,但愿这个思路能给以后的本身提个醒,别忘记就好。