5.4.3.1 应用接入签名算法

  链下业务系统向城市节点网关发送交易请求时,需使用应用接入密钥对中的私钥对交易请求报文进行数字签名,节点网关接收到交易请求报文后,使用已上传或托管的密钥对中的公钥对该报文进行验签。只有在交易报文验签通过时,网关才会对交易请求报文进行后续的交易处理。具体签名算法如下:

  1. 组装签名字符串
  将请求参数按照文档参数表格中的顺序转换为字符串进行拼接,其中请求参数优先拼接Header中的UserCode、AppCode;返回参数优先拼接code、msg。然后再次按照文档参数顺序拼接Body中的参数。

  2. 不同类型的转换格式

类型 规则 示例 结果
String 不转换 abc abc
Int/int64/long 十进制转换 -12 -12
Float 十进制转换,小数位参考备注 1.23 1.23
Bool 转换为“true”或者“false” true true
Array 按照参数顺序和类型拼接 [“abc”,”xyz”] abcxyz
Map[key]value 按照顺序拼接key和value {“a”:1,”b”:2} a1b2
Object 将对象内的属性按照文档循序依据上述格式转换 {“name”:”abc”,”secret”:”123456”} abc123456

  3. 签名规则

  a) 针对使用ECDSA(secp256r1)秘钥算法的Fabric框架应用

  • 哈希值计算:将按照上述规则转换后的待签名的字符串按照UTF-8编码做SHA256计算;

  • 对哈希值获取签名:哈希值与私钥进行ECDSA(secp256r1)加密签名计算;在部分语言的处理中(例如C#、Java)如果使用SHA256WithECDSA进行签名则不需要上一步,该算法中已经取哈希计算。

  • 将签名结果做Base64计算。

  b) 针对使用国密算法的Fabric框架应用,使用以下规则

  • 哈希值计算:将按照上述规则转换后的待签名的字符串按照UTF-8编码做SM3计算;

  • 对哈希值获取签名:哈希值与私钥进行SM2加密签名计算;

  • 将签名结果做Base64计算。

  参数:

{
    "header":{"userCode":"user01","appCode":"app01"},
    "mac":"",
    "body":{“userId”:”abc”,”list”:[“abc”,”xyz”]}
}

  结果:user01app01abcabcxyz

Copyright 北京红枣科技有限公司

results matching ""

    No results matching ""

    results matching ""

      No results matching ""