图南

Results 32 comments of 图南

js 解 asn1 好难搞,累死我了 😂 ```js import crypto from 'crypto'; import asn1 from 'asn1.js'; import {sm2} from "sm-crypto"; const crtPEM = "-----BEGIN CERTIFICATE-----\n" + "MIICezCCAh6gAwIBAgIGAY7MO36xMAwGCCqBHM9VAYN1BQAwSzELMAkGA1UEBhMC\n" + "Q04xDjAMBgNVBAoTBUdNU1NMMRAwDgYDVQQLEwdQS0kvU00yMRowGAYDVQQDExFN\n" + "aWRkbGVDQSBmb3IgVGVzdDAiGA8yMDI0MDQxMDE2MDAwMFoYDzIwMjUwNDEwMTYw\n" +...

> 实际开发中遇到个问题,想请教下大佬们: 后端用Go语言生成的密钥对,前端用公钥能加密成功,在Go和Java上也能用对应的私钥解密成功,但前端无法解密 > > 公钥:(取后130位)3059301306072a8648ce3d020106082a811ccf5501822d0342000410ee64f73e0acb2380bada2697e80a22b39968ac72833b7692968ff2c21bc88e8afcbdc1b89c3382089415cea907e61b02060194675a16c4d48c5e3a57c49388 私钥:308193020100301306072a8648ce3d020106082a811ccf5501822d047930770201010420ff54e3914a41191006633b5f08fcc5e42dbdf2c26c18d55dd9501f0d889c151ea00a06082a811ccf5501822da1440342000410ee64f73e0acb2380bada2697e80a22b39968ac72833b7692968ff2c21bc88e8afcbdc1b89c3382089415cea907e61b02060194675a16c4d48c5e3a57c49388 > > 原文:你好啊 密文:(已添加 04 标识)044fd2407ae9b39d7e8080c15fa39ad392ce0ba26829345c6422c9fa1a8746ad4c5f42c3a1d6aaab0a8f16405afdcb3fb708c2a200b48ebd9b12adcaf686e4a060c6182903dd43e9b401afccc8504d9360d572a14d372dc7665fc2eb762f2e34c45cf50283c7c07b6e4d > > Go和Java均能解密出原文,但是用sm-crypto解密后结果是空的。。 公钥使用 DER 编码了,解析 DER 之后把 X 和 Y 还原回来即可,私钥使用的 PKCS#8 格式,也需要解析后还原出裸私钥。

@ZongweiBai Java 加密出来的密文格式丢一个出来看看

@ZongweiBai 去除密文前的 04 标识,然后密文换成小写即可: ```js const Sm2Crypto = require("sm-crypto").sm2; let cipherText = "0b16c625f649f154d59b610db390f30aada21b50f1d88cb5bd7cee1671aef9225deff40fe9ece4d39fdb811c9560c7ba557b6a95d77e53f1f2d15cf77066ea6011bd53f21066e99ead0bb31dcb978a74d5878fd7f61953a6928a14e591120c9b81240d3e9aa67d716827db095d"; let privateKeyHex = "4EA87F7B575ECE76D51CADB061CE3B4D7700BFC6231F5C844D7611F123D07879"; let decryptText = Sm2Crypto.doDecrypt(cipherText, privateKeyHex, 1); console.log(decryptText); ``` ```text helloword!sm2 ``` 如果要追因的话,就是这个 js...

感觉有必要写个跨语言说明了,要不然这个 issue 无解 😂。 Golang 使用 gmsm 加/解密: ```go func TestGmsm2Encrypt(t *testing.T) { // 原文 dataBytes := []byte("hello world") // 生成密钥对 sm2PriKey, err := sm2.GenerateKey(nil) if err != nil {...

使用 hutool 做 SM2 加解密: ```java @Test public void Sm2EncryptAndDecrypt() { SM2 sm2 = SmUtil.sm2(); String publicKey = Hex.toHexString(sm2.getQ(false)); String privateKey = Hex.toHexString(sm2.getD());; System.out.println("publicKey = " + publicKey); System.out.println("privateKey =...

so is there any temporary solution to this problem?

@mhalbritter my mistake, it missed mainClass because of I configured the native-maven-plugin incorrectly, thanks for your help.

> @changhr2013 您好,如果java后台生成的公私钥不是获取的Q值,js中有解决办法吗?java那边不乐意改代码; > > ![004ff69d-9a18-4997-835c-9f3b50784947](https://private-user-images.githubusercontent.com/16588210/354052262-12860dd9-9d65-4977-b568-53aa318ee027.jpg?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3MjI1MDM5NjMsIm5iZiI6MTcyMjUwMzY2MywicGF0aCI6Ii8xNjU4ODIxMC8zNTQwNTIyNjItMTI4NjBkZDktOWQ2NS00OTc3LWI1NjgtNTNhYTMxOGVlMDI3LmpwZz9YLUFtei1BbGdvcml0aG09QVdTNC1ITUFDLVNIQTI1NiZYLUFtei1DcmVkZW50aWFsPUFLSUFWQ09EWUxTQTUzUFFLNFpBJTJGMjAyNDA4MDElMkZ1cy1lYXN0LTElMkZzMyUyRmF3czRfcmVxdWVzdCZYLUFtei1EYXRlPTIwMjQwODAxVDA5MTQyM1omWC1BbXotRXhwaXJlcz0zMDAmWC1BbXotU2lnbmF0dXJlPTFhZWQyNWFmNTViZTRhNmIwNTZhNWFiN2Q3YmE3YjhjZjExMGEyZTEyYmJjNTM2NDM3MzZjMzFiNmRmZjkzY2MmWC1BbXotU2lnbmVkSGVhZGVycz1ob3N0JmFjdG9yX2lkPTAma2V5X2lkPTAmcmVwb19pZD0wIn0.LJFzfo8DXlQ7CBHZ2LRwMP_s5HcY3GpboaGW_5kEDOo) 一般 Java 默认生成私钥是 PKCS#8 格式的,公钥是 X.509 格式的,需要解编码。 可以参考 https://github.com/JuneAndGreen/sm-crypto/issues/109 的思路解编码即可。 最好还是沟通让后端改一下,后端现成的解析库,多一行代码的事。 裸公私钥存储和传输的成本也会低很多。

> @changhr2013 -----BEGIN PUBLIC KEY----- .....= -----END PUBLIC KEY----- 请问这个如何转换 公钥一般使用的是 `SubjectPublicKeyInfo` 结构,按照上面 `SubjectPublicKeyInfo` 结构的方法解析一下应该就 ok。