前言
- Java 库 https://github.com/dromara/hutool/
- Python 库 https://github.com/duanhongyi/gmssl
- 背景:Java
hutool
库生成的密钥,Pythongmssl
签名校验不通过,折腾了很久才找到原因
原因
开始
hutool
这样生成的密钥,gmssl
死活通不过签名校验SM2 sm2 = new SM2(); sm2.setMode(SM2Engine.Mode.C1C2C3); sm2.setDigest(new SM3Digest()); privateKey = HexUtil.encodeHexStr(sm2.getPrivateKey().getEncoded()) publicKey = HexUtil.encodeHexStr(sm2.getPublicKey().getEncoded())
hutool
正确生成密钥的方式privateKey = HexUtil.encodeHexStr(sm2.getD()) publicKey = HexUtil.encodeHexStr(sm2.getQ(false)) // 公钥不压缩 // 等价于 privateKey = HexUtil.encodeHexStr(BCUtil.encodeECPrivateKey(sm2.getPrivateKey())) publicKey = HexUtil.encodeHexStr(((BCECPublicKey) sm2.getPublicKey()).getQ().getEncoded(false))
后语
- 如果觉得
gmssl
不对头,可以尝试 gmalg
本文出自 qbit snap
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。