RSA签名及验签原理解析及使用

1.原理
1.1 名词解释
公钥
  RSA 密钥体系中对外公开的部分,通常用于数据加密、验证数字签名。

私钥
  RSA 密钥体系中非公开的部分,通常用于数据解密、数据签名。

数字签名
  就是只有信息的发送者才能产生的,别人无法伪造的一段数字串,它同时也是对发送者发送的信息的真实性的一个证明。

1.2 为什么要使用签名
  在系统间报文交互为保证上送报文可靠性[防止中间人攻击],通常做法是在报文中加上校验字[数字签名],并约定好相关算法。

1.3 实现
  为方便系统间交互,本文直接讲述原理,对于RSA_sign 及 RSA_verify的使用下期进行介绍。

1.3.1 签名
对需要上送的报文[en_data]计算特征值[sign_block],相关算法包括[md5、sha1、sha256、sha512等等]。
使用私钥[pri_key]对sign_block加密获得数字签名[sign]。
将sign与en_data打包发送给对方。
1.3.2 验签
解析收到的报文,拆分为sign 及 en_data。
对en_data计算特征值[sign_block],相关算法包括[md5、sha1、sha256、sha512等等双方协商]。
使用公钥[pub_key]对sign解密,获得sign_block1。
比较sign_block 和 sign_block1,若匹配则验证成功,报文未被篡改。
2.使用
调用方称之为客户端,提供服务方称之为服务端。
2.1 客户端生成秘钥对,客户端将公钥给到服务端。
2.2 服务端生成秘钥对, 服务端将公钥给到服务端客户端。
2.3 客户端对报文不含签名部分计算摘要,并对摘要使用客户端的私钥进行加密得到摘要密文即签名。客户端将不含签名部分和签名组成完整请求报文发给服务端。
2.4 服务端接收到客户端发送的报文后对不含签名部分重新计算摘要,使用客户端的公钥对签名进行解密,并将解密结果与重新计算的摘要进行比对,一致则验签通过,否则失败。
2.5 服务端返回,服务端对返回报文不含签名部分计算摘要,并对摘要使用服务端的私钥进行加密得到摘要密文即签名。服务端将不含签名部分和签名组成完整返回报文回复给客户端。
2.6 客户端接收到服务端的回复报文后对不含签名部分重新计算摘要,使用服务端的公钥对签名进行解密,并将解密结果与重新计算的摘要进行比对,一致则验签通过,否则失败。

全部评论

相关推荐

01-02 00:50
三峡大学 Java
程序员牛肉:这简历一出手就离失业不远了。 作为一家公司来讲,我如果要招日常实习生,那我对实习生最基本的要求就是要能干活,毕竟你就待三四个月,谁会留心培养你? 那么除了院校之外,最重要的就是项目和实习了。没有实习的话项目就好好搞。 但是你说你这个项目吧:课程作业管理系统和TMS运输管理系统。这两个基本就和闹着玩差不多。 你作为一个想要应聘Java开发实习生的人,对后端的理解还仅仅停留在:“使用mapper和sql映射”,“使用SQL进行多表调用”,“基于MySQL简历表结构”,“基于Spring boot完成CURD操作”这种玩具上......... 找不到后端实习的
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务