加解密/签名验签

一、我加密、签名的过程

1,生成18位随机密钥:rand

067870-544583-448433;

  2,使用对方的公钥证书(cer文件),并使用“RSA”算法,对随机密钥的字节数组加密,得到一个字节数组,将其转化为小写的十六进制字符串:secretKey

07ed7542951980385e32c149039255aabf8009e1e98a9432db19755e45e07361d318b98393d431cad4f656df7bc254548bacc92c53aa9566fd9ca11054eb1683b68af3837be40fb64c9727ee5be144614a73e6ac66af4177682b21f2fc6fd4371c2ca02c273ba6a9843766fd9ae574a864a171d2a9c1d031cd183f96ca60b738887c617217d18de882b10ce6afe7a7ef17413bad4b9fad353b6da2a74b744098f434f9f86ec8dfa637bcb918925f1e1ec2b49681a21819716217741346254765fd360d98bdc4331b5a66deacc8042fd0e58ee429d27f0c78f93a3307e4417a4d0d2c3c080aa93f2214bf435a66bf6c106f3abb82f5ce0e7a1354217ba77337a8;

,并放入到公共请求参数Map-dataMap中

  3,将业务对象转化为Map-payloadMap,再将payloadMap转化为json字符串:payloadJson

{"age":2,"nickName":"旺财"};

  4,使用随机密钥rand的字节数组对业务对象json字符串payloadJson,进行SMS4国密加密(我采取的是每16个明文字节使用随机密钥字节数组加密),得到字节数组,并转化为小写的十六进制字符串:payload

56c0eab96f91e94fbaeeec57be732c5a530734d32a34fcd56c10a555c0d447ab;

  5,把签名的算法 algorithm:SHA256withRSA 也放入公共请求参数Map-dataMap中。把公共请求参数dataMap,和业务请求参数payloadMap融合成一个plainMap

  6,将融合后的集合plainMap按照键名的字典顺序升序排序,转化为以下结构的字符串:键=值&键=值&键=值;值如果是Map或List,也需要排序;并且值需要经过URLEncoder.encode,不管是外层的map还是内层map;plain

age=2&algorithm=SHA256withRSA&nickName=%E6%97%BA%E8%B4%A2&secretKey=07ed7542951980385e32c149039255aabf8009e1e98a9432db19755e45e07361d318b98393d431cad4f656df7bc254548bacc92c53aa9566fd9ca11054eb1683b68af3837be40fb64c9727ee5be144614a73e6ac66af4177682b21f2fc6fd4371c2ca02c273ba6a9843766fd9ae574a864a171d2a9c1d031cd183f96ca60b738887c617217d18de882b10ce6afe7a7ef17413bad4b9fad353b6da2a74b744098f434f9f86ec8dfa637bcb918925f1e1ec2b49681a21819716217741346254765fd360d98bdc4331b5a66deacc8042fd0e58ee429d27f0c78f93a3307e4417a4d0d2c3c080aa93f2214bf435a66bf6c106f3abb82f5ce0e7a1354217ba77337a8;

  7,使用步骤5中确定的签名算法algorithm:SHA256withRSA,并使用我的私钥证书(pfx文件)对步骤6中“键=值&键=值&键=值”格式的字符串plain生成签名signature

292f3e72f3adc030d42268310edefe4cee3ac882b9981b0698db924fe1f03f64094e84f7b5c4c2f5091416e695b34c384b7d35bf276e0b43095b9b2973eff1f5ff56222e8db46067bda8a085376f552a6239c6a496c769f7cae8f1ed79907fd53fdb713303ed9c5bb9ffa1e4c6cfc689c7fe01f263bf9bfdbee7985c2213fb2e547858a68615205d1fd80d6b28970faf861cb6d341eaa8c0413b02699a742f9adb12cd68e5ca42aac14e604de212ec1163a42ec30b9c35dd015d543fd22047524809bb124cf0bb72d1be4c45e3f9110e703782bac6d3f0bc83614802624cc4748bcea2796fd0325fb600e14d826e9c2e0114407d94ceedff210b815d90991654;
8,将公共参数dataMap和步骤7的签名signature和步骤4的业务密文payload融合成一个Map,仍然叫dataMap

9,将步骤8的dataMap仍然按照步骤6的方式拼接成“键=值&键=值&键=值”格式的字符串sendStralgorithm=SHA256withRSA&payload=56c0eab96f91e94fbaeeec57be732c5a530734d32a34fcd56c10a555c0d447ab&secretKey=07ed7542951980385e32c149039255aabf8009e1e98a9432db19755e45e07361d318b98393d431cad4f656df7bc254548bacc92c53aa9566fd9ca11054eb1683b68af3837be40fb64c9727ee5be144614a73e6ac66af4177682b21f2fc6fd4371c2ca02c273ba6a9843766fd9ae574a864a171d2a9c1d031cd183f96ca60b738887c617217d18de882b10ce6afe7a7ef17413bad4b9fad353b6da2a74b744098f434f9f86ec8dfa637bcb918925f1e1ec2b49681a21819716217741346254765fd360d98bdc4331b5a66deacc8042fd0e58ee429d27f0c78f93a3307e4417a4d0d2c3c080aa93f2214bf435a66bf6c106f3abb82f5ce0e7a1354217ba77337a8&signature=292f3e72f3adc030d42268310edefe4cee3ac882b9981b0698db924fe1f03f64094e84f7b5c4c2f5091416e695b34c384b7d35bf276e0b43095b9b2973eff1f5ff56222e8db46067bda8a085376f552a6239c6a496c769f7cae8f1ed79907fd53fdb713303ed9c5bb9ffa1e4c6cfc689c7fe01f263bf9bfdbee7985c2213fb2e547858a68615205d1fd80d6b28970faf861cb6d341eaa8c0413b02699a742f9adb12cd68e5ca42aac14e604de212ec1163a42ec30b9c35dd015d543fd22047524809bb124cf0bb72d1be4c45e3f9110e703782bac6d3f0bc83614802624cc4748bcea2796fd0325fb600e14d826e9c2e0114407d94ceedff210b815d90991654;

二、对方解密、验签的过程

1,将步骤9中的secretKey使用自己的私钥解密得到随机密钥原文

067870-544583-448433;

2,使用随机密钥原文对步骤9中的payload业务SMS4密文解密转化为Map

{"age"=2,"nickName"="旺财"};

3,将步骤9sendStr转换成Map,并去除signature和payload,融进步骤2的map中,按照相同的规则字典顺序排序拼接成“键=值&键=值&键=值”格式的字符串;

4,将上述字符串使用自己的公钥证书(cer文件)并algorithm算法,签名,得到一个字节数组。和步骤9的signature的字节数组比较。一致,则验签通过。

6,将融合后的集合按照键名的字典顺序升序排序,转化为一下结构的字符串:键=值&键=值&键=值,值如果是Map或List,也需要排序;并且值需要经过URLEncoder.encode,不管是最外层的map还是最外层的map:

原文地址:https://www.cnblogs.com/seeall/p/12063715.html

时间: 2024-10-09 18:58:39

加解密/签名验签的相关文章

RSACryptoServiceProvider加密解密签名验签和DESCryptoServiceProvider加解密

原文:RSACryptoServiceProvider加密解密签名验签和DESCryptoServiceProvider加解密 C#在using System.Security.Cryptography下有 DESCryptoServiceProvider RSACryptoServiceProvider  DESCryptoServiceProvider 是用于对称加密 RSACryptoServiceProvider是用于非对称加密  对称加密的意思:有一个密钥 相当于加密算法,加密用它来加

openresty中使用私钥/公钥进行加密/解密/签名/验签。

对于公钥私钥的提取,详细请看http://www.cnblogs.com/dreamer-One/p/5621134.html另外付在线加解密工具链接:http://tool.chacuo.net/cryptrsaprikey--公钥local RSA_PUBLIC_KEY = [[ -----BEGIN RSA PUBLIC KEY----- MIGJAoGBAJ9YqFCTlhnmTYNCezMfy7yb7xwAzRinXup1Zl51517rhJq8W0wVwNt+ mcKwRzisA1S

eos中签名验签流程和eosjs中的加解密原理

关键词:eos 签名 验签 ecc dsa 加密 解密 eosjs aes 本文主要探讨两方面 1.eosjs中用密钥对进行加解密功能 2.eos中密钥对生成,签名和验签过程(私钥签名 公钥验签) 常用的加密算法 对称性加密算法 对称式加密就是加密和解密使用同一个密钥,信息接收双方都需事先知道密匙和加解密算法,之后便是对数据进行加解密了.对称加密算法用来对敏感数据等信息进行加密. 对称性加密算法有:AES.DES.3DES DES(Data EncryptionStandard):数据加密标准,

.net core RSA 分段加密解密,签名验签(对接java)

参考地址: https://www.cnblogs.com/stulzq/p/7757915.html https://www.cnblogs.com/stulzq/p/8260873.html https://github.com/stulzq/RSAExtensions(XC.RSAUtil) https://www.cnblogs.com/stulzq/p/12053976.html https://github.com/stulzq/RSAExtensions (RSAExtension

非对称加密解密与签名验签的关系

首先看一下各自的定义: 加密:发送方利用接收方的公钥对要发送的明文进行加密. 解密:接受方利用自己的私钥进行解密. 签名:发送方用一个哈希函数从报文文本中生成报文摘要,然后用自己的私人密钥对这个摘要进行加密,得到的就是这个报文对应的数字签名.通常来说,发送方会把数字签名和报文原文一并发送给接受者. 验签:接收方得到原始报文和数字签名后,用同一个哈希函数从报文中生成摘要A,另外,用发送方提供的公钥对数字签名进行解密,得到摘要B,对比A和B是否相同,就可以得知报文有没有被篡改过. 两者的目的不同,加

JAVA 实现 基于RSA算法的签名验签

基本步骤 签名方: 1用sha1算出原文的摘要 2用私钥对摘要进行加密 3对密文进行BASE64编码 验证方: 1对密文进行BASE64解码 2用公钥对解码后的密文解密 3用sha1对原文计算摘要并和解密后的明文比对 上干货 //参数字符串         String userId="2312sd";         String orderId="232djfj";         String price="12312";         

RSA签名验签

import android.util.Base64; import java.security.KeyFactory; import java.security.PrivateKey; import java.security.PublicKey; import java.security.spec.PKCS8EncodedKeySpec; import java.security.spec.X509EncodedKeySpec; /** * Author:JsonLu * DateTime:

RSA签名验签学习笔记

RSA私钥签名时要基于某个HASH算法,比如MD5或者SHA1等.之前我一直认为签名的过程是:先对明文做HASH计算,然后用私钥直接对HASH值加密.最近才发现不是那么简单,需要对HASH后的数据进行BER编码再加密. 先看一个例子. 公钥模:89 54 E6 61 C1 52 DB ED 07 57 50 04 AD B3 D2 A7 A9 8F E8 D8 20 5B 01 B2 E5 E4 7A 7B EE 80 E3 C0 13 11 D2 F9 AD C3 CC 5F 1D 96 AC

iOS RSA加解密签名和验证

转自:http://www.jianshu.com/p/81b0b54436b8 Pre:在公司负责了一个项目,需要用到iOS RSA验证签名的功能.后台给我的仅仅是一个公钥的字符串.经过起初的一段时间的挣扎,发现远远没有那么简单.iOS RSA是需要证书的,而java的后台只能给我一个公钥字符串.搜索了无数网页还是没找到能用的成型的代码.最后还是参考了下支付宝的SDK的签名机制,明白可以先把公钥字符串写入文件然后读取文件得到openssl 中的RSA结构体指针.现在精心整理了下iOS RSA使