【无标题】

SM2加密数据 c1 c2 c3

/***
加密数据byte[] *2 就是 hex字符串的长度 ,分解加密字串
* (C1 = C1标志位2位 + C1实体部分128位 = 130)
* (C3 = C3实体部分64位 = 64)
* (C2 = encryptedData.length * 2 - C1长度 - C2长度)
* 公钥加密,SM2的密文有两种排列方式0-C1C2C3;1-C1C3C2,标准排列方式是1,但是BC库的实现是0,这就导致了同一套密钥,我前端加密了后端一直解不开,当然这还只是解不开的其中一个坑
* 私钥解密,BC库解密时还有一个坑就是用BC库加解密时密文会多一个04开头,其他端参生的密文就没有,导致死活不能解密,这时解密前需要判断是否已04开头,不是的话要补上
* 扩展或重写sm2Engine。由于bouncycastle库sm2加密解密都是使用的密文排列方式是C1C2C3,而加密芯片产生的密文排列方式是C1C3C2,所以自己按照bouncycastle中的sm2Engine类实现自定义的SM2EngineExtend,来实现自定义密文排列方式
*
* SM2非对称加密的结果由C1,C2,C3三部分组成。其中C1是生成随机数的计算出的椭圆曲线点,C2是密文数据,C3是SM3的摘要值。最开始的国密标准的结果是按C1C2C3顺序的,新标准的是按C1C3C2顺序存放的,因此我这边在做SM2加密时新增加了加密结果的顺序参数,以配置兼容之前的SM2算法加密。
*
* SM2加密数据 由C1,C2,C3组成 国密密文的正确排序是 C1+C3+C2
我们安全芯片SM2加密处理的密文顺序是 C1+C3+C2 而BC库加密出来的顺序是C1+C2+C3
我们安全在C1数据最前面没有04,而BC库加密出来的数据前面有04
BC库生成SM2公私钥对时 私钥的前面 偶尔会多加两个 00 而我们安全芯片 不支持 去掉00就可以
公钥的签名偶尔会多加04 而我们安全芯片 不支持 去掉04就可以
*/

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值