您好!
我参考 https://dongle.go-pkg.com/zh/crypto/sm2.html 文档的示例,在这段代码中遇到了一个问题:
package main
import (
"log"
"github.com/dromara/dongle"
"github.com/dromara/dongle/crypto/keypair"
)
func main() {
kp := keypair.NewSm2KeyPair()
kp.PublicKey = []byte(`-----BEGIN PUBLIC KEY-----
MFkwEwYHKoZIzj0CAQYIKoEcz1UBgi0DQgAEVJKqUmu59VTLhqCiVBmKqRjL5MXy
RHKwFAI+qG2Hqy5Wf5cLRlIf7aSMKqwGvYpP6gVOqQpvBdDQhDqr8rqrYA==
-----END PUBLIC KEY-----`)
kp.PrivateKey = []byte(`-----BEGIN PRIVATE KEY-----
MIGHAgEAMBMGByqGSM49AgEGCCqBHM9VAYItBG0wawIBAQQgKvp8GZUkqT8UH/Z5
u8mjNM0JIvqmFolR6LczGEZmSvmhRANCAARUkqpSa7n1VMuGoKJUGYqpGMvkxfJE
crAUAj6obYerLlZ/lwtGUh/tpIwqrAa9ik/qBU6pCm8F0NCEOqvyuqtg
-----END PRIVATE KEY-----`)
encrypter := dongle.Encrypt.FromString("hello world").BySm2(kp)
if encrypter.Error != nil {
log.Fatalf("加密错误: %v\n", encrypter.Error)
}
rawString := encrypter.ToRawString()
decrypter := dongle.Decrypt.FromRawString(rawString).BySm2(kp)
if decrypter.Error != nil {
log.Fatalf("解密错误: %v\n", decrypter.Error)
}
val := decrypter.ToString() // hello world
log.Println(val)
}
golang 版本:1.25
dongle 版本:v1.2.3
我原本期望能得到:
但实际上我得到了:
2026/05/11 15:13:18 加密错误: crypto/sm2: failed to encrypt data: invalid public key: asn1: structure error: point not on curve
我尝试过从其他地方生成SM2密钥对,也是会报错:
package main
import (
"log"
"github.com/dromara/dongle"
"github.com/dromara/dongle/crypto/keypair"
)
func main() {
kp := keypair.NewSm2KeyPair()
kp.PublicKey = []byte(`-----BEGIN PUBLIC KEY-----
MDQ2YjBhYzU4OTQ3M2YyYmQyODc3NTE5NGI2OWIzODhiN2ViMDI3OGRjZDA2Zjcy
NDZmY2I3OTk2YjdjZDM4ZDkwMjVmMjBjZmQyZGM5ZWNkOTQzMTdjOGYzNDI1ZjYx
YzZlZDZmZDMxYWZjYjM0YmNiYTNhOGVhM2YzYTQ1NTc4OA==
-----END PUBLIC KEY-----`)
kp.PrivateKey = []byte(`-----BEGIN PRIVATE KEY-----
NmVmNWIyMmUwYjY0OTgxZjVjOWVkZDZkYjY3MGJkODFmYTMwNWZiOGRiN2FhNDI1
NjVkMDliZmY1OWVkZDVlMg==
-----END PRIVATE KEY-----`)
encrypter := dongle.Encrypt.FromString("hello world").BySm2(kp)
if encrypter.Error != nil {
log.Printf("加密错误: %v\n", encrypter.Error)
return
}
rawString := encrypter.ToRawString()
decrypter := dongle.Decrypt.FromRawString(rawString).BySm2(kp)
if decrypter.Error != nil {
log.Printf("解密错误: %v\n", decrypter.Error)
return
}
val := decrypter.ToString() // hello world
log.Println(val)
}
运行结果:
2026/05/11 15:16:28 加密错误: crypto/sm2: failed to encrypt data: invalid public key: asn1: syntax error: invalid SubjectPublicKeyInfo
只有尝试本地生成密钥,不做任何操作,才能获得正确结果:
package main
import (
"log"
"github.com/dromara/dongle"
"github.com/dromara/dongle/crypto/keypair"
)
func main() {
kp := keypair.NewSm2KeyPair()
err := kp.GenKeyPair()
if err != nil {
log.Fatal(err)
}
encrypter := dongle.Encrypt.FromString("hello world").BySm2(kp)
if encrypter.Error != nil {
log.Printf("加密错误: %v\n", encrypter.Error)
return
}
rawString := encrypter.ToRawString()
decrypter := dongle.Decrypt.FromRawString(rawString).BySm2(kp)
if decrypter.Error != nil {
log.Printf("解密错误: %v\n", decrypter.Error)
return
}
val := decrypter.ToString() // hello world
log.Println(val)
}
运行结果:
2026/05/11 15:18:25 hello world
谢谢!
您好!
我参考 https://dongle.go-pkg.com/zh/crypto/sm2.html 文档的示例,在这段代码中遇到了一个问题:
golang 版本:1.25
dongle 版本:v1.2.3
我原本期望能得到:
但实际上我得到了:
我尝试过从其他地方生成SM2密钥对,也是会报错:
运行结果:
只有尝试本地生成密钥,不做任何操作,才能获得正确结果:
运行结果:
谢谢!