DZ_XIAOBAI 2016-12-24 01:46 采纳率: 0%
浏览 3309

如何实现报文的签名和验签

1.1 报文签名验签

报文签名采用标准XML文件格式格式(参照W3C标准)。

1.2 数据签名
从xml报文中,取指定节点数据(带有标签,不带命名空间),直接拼接后形成待签名数据源,然后再进行签名。
数据签名采用标准的PKCS#1格式。
数字签名前要对源数据使用SHA-1数据摘要算法作HASH运算,再用签名私钥作RSA运算,结果即为对数据的“数字签名”。下面记DATA为待签名数据, SHA(…)为HASH函数,RSA(…)为RSA运算函数,SIGN为签名结果。数字签名过程为:_
(1) 用SHA-1摘要算法对需要签名的数据(DATA)进行HASH运算,生成20字节HASH结果:
H = SHA(DATA) H为20字节
(2) 按PKCS#1标准对HASH结果作填充
B = 00 01 00 ff ff … ff 00
30 21 30 09 06 05 2B 0E 03 02 1A 05 00 04 14
H[00], H[01], …, H13 使用私钥(记作pvk)对填充后的数据块作RSA运算,生成128字节签名结果:
SIGN = RSApvk(B) SIGN为128字节
(4) 将签名结果(128字节)进行Base64转换,生成172字节签名结果串。
(5) 172字节签名结果串即为签名结果。

1.3 数据验签
从xml报文中,取指定节点数据(带有标签,不带命名空间),直接拼接后形成验签数据源,从报文中取签名结果。
接收方根据接收报文中的签名者信息(SignerID、KeyName),查找对应的证书及公钥,然后使用该公钥对签名进行验证。
从接收报文中取签名结果,记为SIGN,签名原数据为DATA,验签公钥为pbk,则验证签名的流程为:
_(1) 将Base64格式的签名结果串转换为128字节二进制数据。
(2) 使用公钥对签名结果作RSA公钥解密运算并去掉填充:
H’ = RSApbk(SIGN)
(3) 对签名原数据作HASH运算:
H = SHA(DATA)
(4) 比较H与H’, 如相等,则验证正确,否则验证错误。
_

  • 写回答

1条回答 默认 最新

  • zqbnqsdsmd 2016-12-24 01:56
    关注

    别硬扛着了,这活还是雇个程序员吧。

    评论

报告相同问题?

悬赏问题

  • ¥50 永磁型步进电机PID算法
  • ¥15 sqlite 附加(attach database)加密数据库时,返回26是什么原因呢?
  • ¥88 找成都本地经验丰富懂小程序开发的技术大咖
  • ¥15 如何处理复杂数据表格的除法运算
  • ¥15 如何用stc8h1k08的片子做485数据透传的功能?(关键词-串口)
  • ¥15 有兄弟姐妹会用word插图功能制作类似citespace的图片吗?
  • ¥200 uniapp长期运行卡死问题解决
  • ¥15 latex怎么处理论文引理引用参考文献
  • ¥15 请教:如何用postman调用本地虚拟机区块链接上的合约?
  • ¥15 为什么使用javacv转封装rtsp为rtmp时出现如下问题:[h264 @ 000000004faf7500]no frame?