Go语言实现RSA加解密算法详解
作者:JonLee 发布时间:2024-02-08 12:20:55
标签:Go,RSA
随着互联网的高速发展,人们对安全的要求也越来越高。密码学中两大经典算法,一个是对称加解密,另一个是非对称加解密,这里就来分享一下非对称加密算法的代表:RSA加解密。
在Go语言中实现RSA
加解密还是比较简单的,网上很多教程都是基于Go原生标准库写的,代码量较多。这里分享一个好用的库:https://github.com/forgoer/openssl 。
安装
go get https://github.com/forgoer/openssl
秘钥生成
秘钥可以生成在文件里,也是生成到Buffer里,只要实现了io.Writer
即可。
import (
"io/ioutil"
"os"
"github.com/forgoer/openssl"
)
func main() {
// 创建私钥文件
priFile, err := os.Create("private.key") // 也可以使用buffer, priBuf := bytes.NewBuffer(nil)
if err != nil {
panic(err)
}
defer priFile.Close()
// 生成私钥到文件
_ = openssl.RSAGenerateKey(1024, priFile)
// 创建公钥文件
pubFile, err := os.Create("public.key")
if err != nil {
panic(err)
}
defer priFile.Close()
// 通过私钥生成公钥到文件
priByte, _ := ioutil.ReadFile("private.key")
_ = openssl.RSAGeneratePublicKey(priByte, pubFile)
}
加解密
使用公钥加密,私钥解密。
src := []byte("123456")
pubByte, _ := ioutil.ReadFile("public.key")
// 公钥加密
dst, _ := openssl.RSAEncrypt(src, pubByte)
priByte, _ := ioutil.ReadFile("private.key")
// 私钥解密
res, _ := openssl.RSADecrypt(dst, priByte)
fmt.Println(string(res)) // 123456
签名及验证
使用私钥签名,公钥验证。
// 私钥签名
sign, err := openssl.RSASign([]byte("123456"), priByte, crypto.SHA256)
if err != nil {
panic(err)
}
// 公钥验证签名
err = openssl.RSAVerify([]byte("123456"), sign, pubByte, crypto.SHA256)
if err != nil {
panic(err)
}
这个加解密库:https://github.com/forgoer/openssl,它还支持AES
、DES
、RSA
、sha1
、Hmac-Sha1
、sha256
、Hmac-Sha256
等常用算法。
来源:https://segmentfault.com/a/1190000043858840
![](https://www.aspxhome.com/images/zang.png)
![](https://www.aspxhome.com/images/jiucuo.png)
猜你喜欢
- 一、Python安装:最新Python版本的下载和安装可以参考我的这篇博客,里面有步骤说明和注意事项。二、手动更新pip:在安装第三方插件时
- 众所周知,python文件读取文件的时候所支持的newlines(即换行符),是指定的。这一点不管是从python的doucuments上还
- Python的3.0版本,常被称为Python 3000,或简称Py3k。相对于Python的早期版本,这是一个较大的升级。为了不带入过多的
- 1、运算概念的理解运算(Operation)是操作逻辑的抽象运算体现一种操作逻辑,在广义角度来说任何程序都是一种运算Python解释器通过保
- 经常看见MOP上有人贴那种动态的图片,就是把一个字符串作为参数传给一个 * 页,就会生成一个带有这个字符串的图片,这个叫做文字水印。像什么原
- 本文实例讲述了Python找出list中最常出现元素的方法。分享给大家供大家参考,具体如下:假设一个list中保存着各种元素,需要统计每个元
- 以前的Dreamweaver中是没有图片处理功能的,即使你要处理也只能使用CSS中的相关滤镜进行一些效
- pytorch中自定义backward()函数。在图像处理过程中,我们有时候会使用自己定义的算法处理图像,这些算法多是基于numpy或者sc
- <?php$dsn = "mysql:host=localhost;dbname=group";$db = new
- # -*- coding: GBK -*- from ctypes import * dll = windll.LoadLibrary(
- getpass模块的使用:在python中实现密码密文需要导入getpass模块,在python中要使用内置模块的话,需要使用import进
- 目录一、图片处理(一)图片采集(二)图片装载(三)完整代码二、初始化pygame相关参数(一)设置初始化参数(二)设置为全屏显示:三、核心模
- 为什么要引入线程池如果在程序中经常要用到线程,频繁的创建和销毁线程会浪费很多硬件资源,所以需要把线程和任务分离。线程可以反复利用,省去了重复
- 本文为大家分享了MySQL 8.0.29 安装配置方法图文教程,供大家参考,具体内容如下一、安装包下载1、下载地址安装包,按下图所示操作下载
- 实例如下所示:>>> import pandas as pd>>> df = pd.DataFrame(
- 前言Pythonnet这个 * 爆的项目的出现,使得我们可以用一种新的方式,让C#可以和Python之间进行互操作。但是它的设置和部署可能有点问
- 本文只讨论Oracle中最常见的索引,即是B-tree索引。本文中涉及的数据库版本是Oracle8i。 一. 查看系统表中的用户索引 在Or
- 前言最近在做项目高可用时,需要使用数据同步。由于只有双节点,且采用主主同步可能存在循环同步的风险,故综合考虑采用Mysql主从同步(Mast
- 很多朋友想用SQL2000数据库的编程方法,但是却又苦于自己是学ACCESS的,对SQL只是一点点的了解而已,这里我给大家提供以下参考---
- 使用Keras训练好的模型用来直接进行预测,这个时候我们该怎么做呢?【我这里使用的就是一个图片分类网络】现在让我来说说怎么样使用已经训练好的