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加解密内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

您可能感兴趣的文章:

相关文章

  • golang原生实现JWT的示例代码

    golang原生实现JWT的示例代码

    在Go中实现JWT验证,可以通过标准库crypto/hmac、crypto/sha256和encoding/base64来编写自己的JWT,本文就详细的来介绍一下,感兴趣的可以了解下
    2023-05-05
  • Go 多环境下配置管理方案(多种方案)

    Go 多环境下配置管理方案(多种方案)

    这篇文章主要介绍了Go 多环境下配置管理方案,方案一配置文件管理,方案二集中式管理配置,每种方案给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2022-06-06
  • 一文带你了解Go语言中的I/O接口设计

    一文带你了解Go语言中的I/O接口设计

    I/O 操作在编程中扮演着至关重要的角色,它涉及程序与外部世界之间的数据交换,下面我们就来简单了解一下Go语言中的 I/O 接口设计吧
    2023-06-06
  • golang中常见的logrus日志库

    golang中常见的logrus日志库

    这篇文章主要介绍了golang中常见的logrus日志库的相关资料,需要的朋友可以参考下
    2023-05-05
  • 秒懂Golang匿名函数

    秒懂Golang匿名函数

    所谓匿名函数,就是没有名字的函数,本文重点给大家介绍Golang匿名函数的相关知识,通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2021-02-02
  • golang中json反序列化可能遇到的问题

    golang中json反序列化可能遇到的问题

    这篇文章主要给大家介绍了关于golang中json反序列化可能遇到的问题的解决方法,文中通过示例代码介绍的非常详细,对大家学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧。
    2018-01-01
  • golang中一种不常见的switch语句写法示例详解

    golang中一种不常见的switch语句写法示例详解

    这篇文章主要介绍了golang中一种不常见的switch语句写法,本文通过示例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2023-05-05
  • golang利用pprof与go-torch如何做性能分析

    golang利用pprof与go-torch如何做性能分析

    这篇文章主要给大家介绍了关于golang利用pprof与go-torch如何做性能分析的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2018-07-07
  • windows下安装make及使用makefile文件

    windows下安装make及使用makefile文件

    这篇文章主要为大家介绍了windows下安装make及使用makefile文件方法详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-01-01
  • Golang-如何判断一个 interface{} 的值是否为 nil

    Golang-如何判断一个 interface{} 的值是否为 nil

    interface 的内部实现包含了两个字段,一个是 type,一个是 data,这篇文章主要介绍了Golang-如何判断一个interface{}的值是否为nil,需要的朋友可以参考下
    2023-05-05

最新评论