
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使用aes库实现加解密操作
golang实现加密解密的库很多,这里使用的是aes库+base64库来实现. 使用时,需要指定一个私钥,来进行加解密,这里指定是: var aeskey = []byte("321423u9y8d2fwfl") 上代码: package main import ( "fmt" "crypto/cipher" "crypto/aes" "bytes" "encoding/base64"
-
Android zip4j压缩、解压、加解密的示例代码
jdk有原生的zip包,因为用起来没有达到想要的效果,所以此次用的是第三方zip4j开源 zip4j.jar官网下载链接 直接代码: package com.dfxh.wang.compress_operate; import android.util.Log; import net.lingala.zip4j.core.ZipFile; import net.lingala.zip4j.exception.ZipException; import net.lingala.zip4j.model
-
PHP实现RSA加解密算法示例(生成密钥位数为1024位的方法)
大家可以先到http://web.chacuo.net/netrsakeypair这个网站,在线生成公钥和私钥 RSA非对称加密算法,如果是公钥加密,就得用私钥解密,反过来也一样,私钥加密的就用公钥解密,以下是相关实现函数 /** * RSA私钥加密 * @param string $private_key 私钥 * @param string $data 要加密的字符串 * @return string $encrypted 返回加密后的字符串 * @author mosishu */ fun
-
PHP使用openssl扩展实现加解密方法示例
从PHP7版本开始很多依赖mcrypt扩展的方法都不支持了,PHP7.2.0及以上版本已经完全不支持mcrypt扩展的任何方法了,所以PHP7及以上版本都应该使用openssl扩展来实现加解密. 以DES-CBC加密方式为例: <?php class DesUtil { /** * Des 加密 * * @param $str * @param $secretKey * @param string $iv * @return string */ public static function en
-
C语言编程入门必背的示例代码整理大全
目录 一.C语言必背代码前言 二.一部分C语言必背代码 一.C语言必背代码前言 对于c语言来说,要记得东西其实不多,基本就是几个常用语句加一些关键字而已.你所看到的那些几千甚至上万行的代码,都是用这些语句和关键词来重复编写的.只是他们逻辑功能不一样,那如何快速的上手C语言代码,建议多看多写,下面是小编整理的C语言必背代码. 二.一部分C语言必背代码 1.输出9*9成法口诀,共9行9列,i控制行,j控制列. #include "stdio.h" main() {int i,j,resul
-
C语言实现可排序通讯录的示例代码
目录 1.目的 2.分部流程 1.初始化通讯录 2.添加联系人 3.判断联系人是否存在 4.判断通讯录是否已满 5.判断通讯录是否为空 6.通讯录扩容 7.核心函数 8.查找联系人 9.修改联系人 10.清空通讯录 11.删除联系人 12.显示通讯录 13.比较联系人 14.通讯录排序 3.总代码展示 1.目的 写一个实用型通讯录,它有如下功能: 显示目录 void ShowMenu() { printf("#######################\n"); printf(&qu
-
Golang实现AES加密和解密的示例代码
目录 对称加密 AES 算法 加解密 文件加密解密 说明 对称加密 AES 算法 (Advanced Encryption Standard ,AES) 优点 算法公开.计算量小.加密速度快.加密效率高. 缺点 发送方和接收方必须商定好密钥,然后使双方都能保存好密钥,密钥管理成为双方的负担. 应用场景 相对大一点的数据量或关键数据的加密. 加解密 package helpers import ( "bytes" "crypto/aes" "crypto/c
-
Java实现Excel文件加密解密的示例代码
目录 概述 示例大纲 工具 Java代码示例 示例1加密工作簿 示例2解密工作簿 示例3加密工作表 示例4加密工作表指定数据范围 示例5设置工作表公式隐藏 示例6解密Excel工作表 概述 设置excel文件保护时,通常可选择对整个工作簿进行加密保护,打开文件时需要输入密码:或者对指定工作表进行加密,即设置表格内容只读,无法对工作表进行编辑.另外,也可以对工作表特定区域设置保护,即设置指定区域可编辑或者隐藏数据公式,保护数据信息来源.无需设置文档保护时,可撤销密码保护,即解密文档.下面,将通过j
-
C语言实现经典排序算法的示例代码
目录 一.冒泡排序 1.原理 2.实现 3.算法分析 二.选择排序 1.原理 2.实现 3.算法分析 三.插入排序 1.原理 2.实现 3.算法分析 四.希尔排序 1.原理 2.实现 3.算法分析 总结 一.冒泡排序 1.原理 从数组的头开始不断比较相邻两个数的大小,不断将较大的数右移,一个循环后,最大数移至最后一位,无序数组规模减一.不断重复前面动作,知道数组完全有序. 2.实现 void swap(int* a, int* b) { int temp = *a; *a = *b; *b =
-
C语言实现静态版通讯录的示例代码
目录 前言 通讯录需求分析 功能介绍 实现思路 代码实现 test.c contact.c contact.h 效果图 前言 大家好~今天要实现一个非常有意思的东西–通讯录. 通讯录需求分析 为了实现通讯录管理系统,为此,要保证实现以下的功能: 能够存放1000个联系人的信息.每个人的信息包含:名字.年龄.性别.电话.地址.除此之外,还是实现:增加人的信息.删除人的信息.修改指定人的信息.查找指定人的信息.清空联系人的信息.显示联系人的信息.排序通讯录的信息. 功能介绍 1.增加联系人信息 2.
-
C语言实现职工工资管理系统的示例代码
目录 一.需求分析 二.项目环境 2.1.项目创建过程 2.2.向项目添加头文件与源文件 三.职工工资管理系统模块功能 3.1.系统总体设计框图 3.2.系统模块总体设计 3.3.设计系统菜单功能 3.4.设计系统输入模块 3.5.设计系统查询模块 3.6.设计系统修改模块 3.7.设计系统删除模块 3.8.设计系统统计模块 3.9.设计系统输出模块 3.10.设计系统追加模块 3.11.设计系统退出模块 总结 一.需求分析 1.随着计算机的飞速发展,它的应用已经十分广泛,它在人们的生产.生活.
随机推荐
- Python实现一个简单的验证码程序
- C#集合类用法实例代码详解
- 最新密码验证正则表达式
- CentOS6.9下NFS服务安装配置教程
- Python MySQL数据库连接池组件pymysqlpool详解
- IOS之构造方法与自定义构造方法的区别与实现
- 用JavaScript计算在UTF-8下存储字符串占用字节数
- Yii2框架RESTful API 格式化响应,授权认证和速率限制三部分详解
- php 数组操作(增加,删除,查询,排序)等函数说明第1/2页
- PHP提示Deprecated: mysql_connect(): The mysql extension is deprecated的解决方法
- 深入解析Python中的WSGI接口
- Android中CheckBox复选框控件使用方法详解
- MySQL NULL 值处理实例详解
- dedecms后台验证码总提示错误的解决方法
- AJAX应用中必须要掌握的重点知识(分享)
- 设置Linux系统的空闲等待时间TMOUT的方法
- java自定义日期转化类示例
- 更高效的使用JQuery 这里总结了8个小技巧
- juqery 学习之三 选择器 简单 内容
- jQuery实现鼠标滑过遮罩并高亮显示效果
其他
- pyinstaller装不上
- MYSQL 如何 事务跟踪SQL
- docker容器无法通过IP访问宿主机问题
- js 点击其他地方关闭layer.open
- iOS 高德地图导入sdk
- 引用是类型安全的,而指针不是 (引用比指针多了类型检查)
- go 数组类型转换[]interface{}
- jupyter notebook更换内核
- new Vue()和data()
- @click.native不能在原生元素上使用怎么解决
- mysql 8.0.28 离线包安装教程
- js二级联动省市代码
- freertos 怎么获取时钟频率
- Python str底层实现
- java 遍历resource 目录文件
- tkmybatis怎么打印执行sql语句出来
- linux python USB插拔触发
- java8 线程安全 计数
- python ali源
- mysql 查询当前事务id