zoukankan      html  css  js  c++  java
  • 关于Java实现RSA签名

    一、项目介绍

    需要实现对接口的签名和加密。使用的是RSA非对称加密,签名方法用的是RSA自带的。

    签名原理,私钥签名,公钥验签。

    如果第三方不想让接口提供方知道他们的私钥,可以让第三方自己生成公私钥,把公钥公开出来 验签得双方验证才行,就是说双方都得有自己的公私钥,

    传输过程带上自己的公钥去验证,但是这有个问题,这个公私钥的合法性,如果是用证书可以用证书链的验证解决。

    二、签名生成通用规则

    签名原文组装说明:

    无论是请求还是响应,签名原文组装规则如下:

    1、除sign字段外,所有参数按照字段名的ASCII字码从小到大排序。排序完成之后,再把所有键值对以“&”字符连接起来(如key1=value1&key2=value2)。

    2、如果参数值是一个子JSONObject,则先将子JSON按照字段名的ASCII字码从小到大排序,把子JSON中的所有键值对以“&”字符连接起来,以此作为该参数的值,再进行拼接。

    3、如果参数值是一个JSON数组,需要把JSON数组里面的内容转换成字符串,然后按照字段名的ASCII字码从小到大排序,把子JSON中的所有键值对以“&”字符连接起来,以此作为该参数的值,再进行拼接。

    4、所有参数是指实际出现的所有非空参数,即使是没有事先描述的非空字段,也需要参与签名组串。

    5、签名原始串中,各字段和字段值都采用原始值,不进行URLEncoder。

    6、参数名区分大小写。

    三、签名(sign)生成通用步骤

    对上述拼接好的data_to_sign使用商户的私钥进行RSA签名。

    示例如下:

    假设传递的json串如下:

    {"area":"郑州","email":"1234567@qq.com","frimname":"张三","idNumber":"320206198611222555","name":"赵六","phone":"17839949863"}

    1、拼接的待签原文(data_to_sign):

    email=1234567@qq.com&frimname=张三&idNumber=320206198611222555&name=赵六&phone=17839949869

    2、使用线下拿到的私钥进行签名,sign=sign(data_to_sign,私钥));

    3、执行成功后,会得到一个sign,是由接口返回的签名,再用data_to_sign和服务商的公钥验证签名,保证数据没被篡改。

  • 相关阅读:
    算法训练 P1103
    算法训练 表达式计算
    算法训练 表达式计算
    基础练习 时间转换
    基础练习 字符串对比
    Codeforces 527D Clique Problem
    Codeforces 527C Glass Carving
    Codeforces 527B Error Correct System
    Codeforces 527A Glass Carving
    Topcoder SRM 655 DIV1 250 CountryGroupHard
  • 原文地址:https://www.cnblogs.com/ZJOE80/p/15609012.html
Copyright © 2011-2022 走看看