脚本之家,脚本语言编程技术及教程分享平台!
分类导航

Python|VBS|Ruby|Lua|perl|VBA|Golang|PowerShell|Erlang|autoit|Dos|bat|shell|

服务器之家 - 脚本之家 - Golang - Go语言实现Sm2加解密的示例代码

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

2023-03-19 15:33i wanan Golang

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

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

示例代码如下:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
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加解密内容请搜索服务器之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持服务器之家!

原文链接:https://blog.csdn.net/abc54250/article/details/129290305

延伸 · 阅读

精彩推荐
  • Golang如何解决goland,idea全局搜索快捷键失效问题

    如何解决goland,idea全局搜索快捷键失效问题

    这篇文章主要介绍了如何解决goland,idea全局搜索快捷键失效问题,快捷键失效,可能是快捷键冲突,也或者是快捷键被修改成其他了。在settings下查看快捷键...

    峰啊疯了5232022-09-13
  • GolangGo语言区别于其他语言的特性

    Go语言区别于其他语言的特性

    在本文中,今天这篇文章将给大家介绍一下 Go 与其他语言不同的 9 个特性,需要的朋友可以参考下面文章的具体内容...

    海拥9722021-11-19
  • Golanggo语言base64加密解密的方法

    go语言base64加密解密的方法

    这篇文章主要介绍了go语言base64加密解密的方法,实例分析了Go语言base64加密解密的技巧,需要的朋友可以参考下 ...

    dingding4752020-04-20
  • Golang详解go语言的并发

    详解go语言的并发

    这篇文章主要介绍了go语言并发的相关资料,帮助大家更好的理解和学习使用golang,感兴趣的朋友可以了解下...

    bainianminguo9982021-04-18
  • Golanggoland 恢复已更改文件的操作

    goland 恢复已更改文件的操作

    这篇文章主要介绍了goland 恢复已更改文件的操作,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...

    疯狂学者10972021-06-05
  • GolangGo开源项目分布式唯一ID生成系统

    Go开源项目分布式唯一ID生成系统

    这篇文章主要为大家介绍了Go开源项目分布式唯一ID生成系统示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪...

    yongxinz6152022-10-20
  • GolangGoland 的安装及激活教程(window、linux下安装)

    Goland 的安装及激活教程(window、linux下安装)

    这篇文章主要介绍了Golang Goland 的安装及激活详细教程,包括window下安装goland和linux下安装goland,本文给大家介绍的非常详细,对大家的学习或工作具有一定...

    李培冠17112021-01-31
  • GolangGo error的使用方式详解

    Go error的使用方式详解

    当我们需要在Go项目中设计error,就不得不先知道Go error几种常用方法,今天通过本文给大家介绍Go error的使用方式详解,感兴趣的朋友一起看看吧...

    Flappy6042022-10-11