SM2算法

文章目录

  • 前言
  • 一、SM2是什么?
  • 二、go语言实现


前言

提示:以下是本篇文章正文内容,下面案例可供参考

一、SM2是什么?

SM2是国家密码管理局于2010年12月17日发布的椭圆曲线公钥密码算法。
SM2算法和RSA算法都是公钥密码算法,SM2算法是一种更先进安全的算法,在我们国家商用密码体系中被用来替换RSA算法。
随着密码技术和计算机技术的发展,目前常用的1024位RSA算法面临严重的安全威胁,我们国家密码管理部门经过研究,决定采用SM2椭圆曲线算法替换RSA算法。

二、go语言实现

package mainimport ("github.com/tjfoc/gmsm/sm2""fmt""encoding/hex""io/ioutil""crypto/rand"
)func main() {privateKey, err := sm2.GenerateKey()if err != nil {fmt.Println("秘钥对生成失败!")return}//从私钥中获取公钥publicKey := &privateKey.PublicKey//消息msg := []byte("兄弟连")//公钥加密encrypt_msg, err := publicKey.Encrypt(msg)if err != nil {fmt.Println("加密失败")return}else {fmt.Println("encrypt_msg = ", hex.EncodeToString(encrypt_msg))}//私钥解密decrypt_msg, err := privateKey.Decrypt(encrypt_msg)if err != nil {fmt.Println("解密失败!")}else {fmt.Println("decrypt_msg = ", string(decrypt_msg))}}//生成公钥私钥并写入文件
//privateKeyPath:私钥路径
//publicKeyPath:公钥路径
//password:用于加密私钥
func WriteKeyPairToFile(privateKeyPath, publicKeyPath string, password []byte) error {//生成秘钥对privateKey, err := sm2.GenerateKey()if err != nil {return err}//私钥写入到文件flag, err := sm2.WritePrivateKeytoPem(privateKeyPath, privateKey, password)if !flag {return err}//获得公钥publicKey := privateKey.Public().(*sm2.PublicKey)flag, err = sm2.WritePublicKeytoPem(publicKeyPath, publicKey, nil)if !flag {return err}return nil
}//从文件中读取公钥和私钥
func ReadKeyPairFromFile(privateKeyPath, publicKeyPath string, password []byte) (*sm2.PrivateKey, *sm2.PublicKey, error) {//读取私钥privateKey, err := sm2.ReadPrivateKeyFromPem(privateKeyPath, password)if err != nil {return nil, nil, err}//读取公钥publicKey, err := sm2.ReadPublicKeyFromPem(publicKeyPath, nil)if err != nil {return nil, nil, err}return privateKey, publicKey, nil
}func main1()  {
/*	err := WriteKeyPairToFile("private.pem","public.pem", []byte("1234"))if err != nil {fmt.Println("秘钥对写入文件失败!")}*/privateKey, publicKey, err := ReadKeyPairFromFile("private.pem","public.pem", []byte("1234"))if err != nil {fmt.Println("读取公钥私钥失败!")return}//读取待加密的文件file, err := ioutil.ReadFile("E:/1.mp4")if err != nil {fmt.Println("文件读取失败!")return}//签名sig_msg, err := privateKey.Sign(rand.Reader, file, nil)if err != nil {fmt.Println("签名失败!")return}flag := publicKey.Verify(file, sig_msg)if flag {fmt.Println("验证成功")}else {fmt.Println("验证失败")}
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/496647.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

rocketmq 消息 自定义_跟我学RocketMQ[1-4]之消息消费及支持spring

博客地址:朝闻道​www.wuwenliang.net本文我将继续讲解如何使用DefaultMQPushConsumer对RocketMQ中的消息进行消费,同时在文章的第二部分将继续带领读者朋友对DefaultMQPushConsumer进行薄封装,让我们在Spring中更容易对消息进行消费。DefaultMQPushCons…

sklearn 逻辑回归Demo

逻辑回归案例 假设表示 基于上述情况,要使分类器的输出在[0,1]之间,可以采用假设表示的方法。 设 h θ ( x ) g ( θ T x ) h_θ (x)g(θ^T x) hθ​(x)g(θTx), 其中 g ( z ) 1 ( 1 e − z ) g(z)\frac{1}{(1e^{−z} )} g(z)(1e−z)1​…

URL原理、URL编码、URL特殊字符、输入URL到页面显示

​From:http://blog.csdn.net/zmx729618/article/details/51381655 From:http://www.cnblogs.com/coco1s/p/5038412.html HTML URL 编码参考手册:https://www.w3cschool.cn/htmltags/html-urlencode.html http://www.w3school.com.cn/t…

记忆模糊、记忆泛化的关键分子开关被发现

来源:brainnews2018年3月12日,Nature Medicine杂志在线刊登了麻省总医院Amar Sahay研究组的最新重要工作,他们发现了一种细胞骨架蛋白Actin-binding LIM protein 3 (ABLIM3),降低该蛋白的表达水平可以增强海马齿状回细胞&#xff…

240多个jQuery插件 (转)

概述 jQuery 是继 prototype 之后又一个优秀的 Javascript 框架。其宗旨是—写更少的代码,做更多的事情。它是轻量级的 js 库(压缩后只有21k) ,这是其它的 js 库所不及的,它兼容 CSS3,还兼容各种浏览器(IE 6.0, FF 1.5, Safari 2.…

Exchanger及其用法

01 Exchanger 作用 使两个线程之间进行数据传递。(对是两个之间而不是三个或者更多个线程之间) 02 常用方法 exchange() 阻塞当前线程并等待其他线程来取得数据,若没有其他线程来取数据则一直等待。 exchange&…

SM3算法

文章目录前言一、SM3是什么?二、go语言实现前言 提示:以下是本篇文章正文内容,下面案例可供参考 一、SM3是什么? SM3是中华人民共和国政府采用的一种密码散列函数标准,由国家密码管理局于2010年12月17日发布。相关标…

2 如何设置窗口title_如何设置华为4G路由2的WiFi黑白名单【设置方法】

不想让自家的Wi-Fi被蹭网,除了将Wi-Fi隐藏起来,您还可以设置Wi-Fi黑白名单。如果您发现有人蹭网了,可以将蹭网设备直接加入黑名单,这样就可以禁止这个设备再连接到您的Wi-Fi。如果您将家人、朋友的设备加入了白名单,那…

复选框怎么点td选中_jQuery点击tr实现checkbox选中的方法

标题描述的有点不贴切,但希望大家能够明白,为了更形像的表达,我特意录制了一张GIF动画图片。我不知道实际开发中有没有用到这种效果,但我个人认为,这种方式更人性化,因为只要点到一行,就可以使C…

谷歌大脑AutoML最新进展:用进化算法发现神经网络架构

来源:AI中国大脑的进化进程持续已久,从5亿年前的蠕虫大脑到现如今各种现代结构。例如,人类的大脑可以完成各种各样的活动,其中许多活动都是毫不费力的。例如,分辨一个视觉场景中是否包含动物或建筑物对我们来说是微不足…

股票名词解释

开盘价:   是指当日开盘后该股票的第一笔交易成交的价格。如果开市后30分钟内无成交价,则以前日的收盘价作为开盘价。 收盘价:   指每天成交中最后一笔股票的价格,也就是收盘价格。 最高价:   是指当日所成交的…

linux 的 ip 命令 和 ifconfig 命令

From(试试Linux下的ip命令,ifconfig已经过时了): https://linux.cn/article-3144-1.html From(linux网络配置命令之ifconfig、ip和route): http://chrinux.blog.51cto.com/6466723/1188108 From…

SM4算法

文章目录前言一、SM4是什么?二、go语言实现前言 提示:以下是本篇文章正文内容,下面案例可供参考 一、SM4是什么? SM4.0(原名SMS4.0)是中华人民共和国政府采用的一种分组密码标准,由国家密码管…

Java并发编程实战~软件事务内存

很多同学反馈说,工作了挺长时间但是没有机会接触并发编程,实际上我们天天都在写并发程序,只不过并发相关的问题都被类似 Tomcat 这样的 Web 服务器以及 MySQL 这样的数据库解决了。尤其是数据库,在解决并发问题方面,可…

python list去重时间复杂度_List集合去重的一种方法 z

需要对一个List集合去重,情况是该集合中会出现多个Name属性值相同的,但是其他属性值不同的数据。在这种情况下,需求要只保留其中一个就好。我觉得遍历和HashSet都不是我想要的,便采用了一下方式定义Compare类,继承IEqu…

对于Office Live平台的思考

刚接触计算机编程的时候,脑子里想法比肚子里的墨水多得多,那时候想通过网络成立一个游戏开发团队,将不少人都很喜欢的一款FC游戏“重装机兵”(Metal Max)移植到电脑上来。当时的想法很激进也很宏大,我想的不…

中国学者用人工光感受器助失明小鼠复明

来源:《自然—通讯》中国研究人员在英国《自然通讯》杂志上发表报告说,他们通过在失明小鼠眼底植入一种新研发的人工光感受器,让它们的视觉得以恢复。如果这种技术发展成熟,未来或许能帮助因黄斑变性等疾病而视力下降或失明的患者…

PoW算法

文章目录前言一、PoW——工作量证明二、go语言简单案例前言 提示:以下是本篇文章正文内容,下面案例可供参考 一、PoW——工作量证明 ⚫ Proof-of-Work 简称 PoW,即为工作量证明 ⚫ 通过计算一个数值,使得拼揍上交易数据后内容的…

systemctl 命令完全指南

From:https://linux.cn/article-5926-1.html systemctl命令是系统服务管理器指令,它实际上将 service 和 chkconfig 这两个命令组合到一起。 任务 旧指令 新指令 使某服务自动启动 chkconfig --level 3 httpd on systemctl enable httpd.service 使某服务不自…

boundcolumn 根据值进行判断_Excel使用函数进行条件判断的方法步骤

Excel中的函数具体该如何进行判断数据的条件是否达到要求呢?下面是学习关于excel使用函数进行条件判断的教程,希望阅读过后对你有所启发! excel使用函数进行条件判断的教程 函数条件判断步骤1:如何计算成绩是否合格 函数条件判断步骤2:选中要…