Go语言实现Sm2加解密的示例代码

 更新时间:2023年03月17日 11:16:50   作者:i wanan  
本文主要介绍了Go语言实现Sm2加解密的示例代码,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

在 Go 语言中,可以使用 github.com/tjfoc/gmsm/sm2 包来实现 SM2 加密和解密。

示例代码如下:

package main

import (
    "fmt"
    "crypto/rand"
    "encoding/hex"
    "github.com/tjfoc/gmsm/sm2"
)

func main() {
    // 生成密钥对
    priKey, err := sm2.GenerateKey(rand.Reader)
    if err != nil {
        fmt.Println(err)
        return
    }

    pubKey := &priKey.PublicKey

    // 明文消息
    message := "Hello, world!"

    // 加密
    cipher, err := pubKey.Encrypt([]byte(message), rand.Reader)
    if err != nil {
        fmt.Println(err)
        return
    }

    fmt.Printf("加密后的密文: %s\n", hex.EncodeToString(cipher))

    // 解密
    plain, err := priKey.Decrypt(cipher)
    if err != nil {
        fmt.Println(err)
        return
    }

    fmt.Printf("解密后的明文: %s\n", string(plain))
}

在这个示例中,我们首先使用 sm2.GenerateKey 函数生成一个密钥对,其中 rand.Reader 是一个随机数生成器。然后,我们使用公钥对明文消息进行加密,得到一个字节数组表示的密文。我们使用 hex.EncodeToString 函数将密文转换成十六进制字符串,并输出加密后的密文。

接着,我们使用私钥对密文进行解密,并输出解密后的明文。注意,解密操作需要使用私钥,而加密操作需要使用公钥。在解密时,我们使用 string 函数将字节数组转换成字符串。

需要注意的是,SM2 算法需要使用特定的密钥格式,即 PKCS#8 格式。因此,如果需要将密钥保存到文件或数据库中,需要使用 x509.MarshalPKCS8PrivateKey 和 x509.MarshalPKIXPublicKey 函数将密钥转换成字节数组。

到此这篇关于Go语言实现Sm2加解密的示例代码的文章就介绍到这了,更多相关Go Sm2加解密内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

您可能感兴趣的文章:

相关文章

  • Go语言关于几种深度拷贝(deepcopy)方法的性能对比

    Go语言关于几种深度拷贝(deepcopy)方法的性能对比

    这篇文章主要介绍了Go语言关于几种深度拷贝(deepcopy)方法的性能对比,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2024-01-01
  • Golang 按行读取文件的三种方法小结

    Golang 按行读取文件的三种方法小结

    本文主要介绍了Golang 按行读取文件的三种方法小结,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-04-04
  • Go语言实现枚举的示例代码

    Go语言实现枚举的示例代码

    本文主要介绍了Go语言实现枚举的示例代码,文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-01-01
  • 详解Golang如何实现支持随机删除元素的堆

    详解Golang如何实现支持随机删除元素的堆

    堆是一种非常常用的数据结构,它能够支持在O(1)的时间复杂度获取到最大值(或最小值)。本文主要介绍了如何实现支持O(log(n))随机删除元素的堆,需要的可以参考一下
    2022-09-09
  • 10个可以优化代码的Go语言技巧分享

    10个可以优化代码的Go语言技巧分享

    这篇文章主要为大家详细介绍了10个可以优化代码的Go语言技巧,从而让我们的代码更加优雅,文中的示例代码讲解详细,需要的小伙伴可以参考下
    2024-01-01
  • 使用golang-unsafe包的注意事项及说明

    使用golang-unsafe包的注意事项及说明

    这篇文章主要介绍了使用golang-unsafe包的注意事项及说明,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-02-02
  • go语言数据类型之字符串string

    go语言数据类型之字符串string

    这篇文章介绍了go语言数据类型之字符串string,文中通过示例代码介绍的非常详细。对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2022-07-07
  • Go并发编程实现数据竞争

    Go并发编程实现数据竞争

    本文主要介绍了Go并发编程实现数据竞争,文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-09-09
  • golang 防缓存击穿singleflight的实现

    golang 防缓存击穿singleflight的实现

    本文主要介绍了golang 防缓存击穿singleflight的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2022-08-08
  • golang操作Redis的实现示例

    golang操作Redis的实现示例

    本文主要介绍了golang操作Redis的实现示例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2024-04-04

最新评论