golang sm2代码
时间: 2023-10-29 11:06:06 浏览: 104
以下是使用Go语言实现SM2加密和解密的示例代码:
```go
package main
import (
"crypto/rand"
"crypto/elliptic"
"crypto/sm2"
"encoding/hex"
"fmt"
)
func main() {
// 生成SM2密钥对
priKey, err := sm2.GenerateKey()
if err != nil {
panic(err)
}
// 使用SM2加密
plaintext := []byte("hello world")
ciphertext, err := sm2.Encrypt(rand.Reader, &priKey.PublicKey, plaintext, nil)
if err != nil {
panic(err)
}
fmt.Println("ciphertext:", hex.EncodeToString(ciphertext))
// 使用SM2解密
decrypted, err := priKey.Decrypt(ciphertext)
if err != nil {
panic(err)
}
fmt.Println("decrypted:", string(decrypted))
// 签名和验签
hash := []byte("message to be signed")
signature, err := priKey.Sign(rand.Reader, hash, nil)
if err != nil {
panic(err)
}
fmt.Println("signature:", hex.EncodeToString(signature))
isValid := sm2.Verify(&priKey.PublicKey, hash, signature)
fmt.Println("isValid:", isValid)
}
```
说明:
- 使用`sm2.GenerateKey()`函数生成SM2密钥对;
- 使用`sm2.Encrypt()`函数进行SM2加密;
- 使用私钥的`Decrypt()`方法进行SM2解密;
- 使用私钥的`Sign()`方法进行签名,使用`sm2.Verify()`函数进行验签。
阅读全文