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


猜你喜欢
- 前言一直都觉得vue的插件生涩难懂,但是又很好奇,在看了几篇文章,试着写了写之后觉得也没那么难,本文主要实现一个简单的Toast插件,方便迁
- 本文是对pandas官方网站上《10Minutes to pandas》的一个简单的翻译,原文在这里。这篇文章是对pandas的一个简单的介
- 开发工具Python版本:3.6.4相关模块:pygame模块;以及一些python自带的模块。环境搭建安装Python并添加到环境变量,p
- 前言1992年扫雷被加入到windows3.1,成为早期windows的经典游戏。近来接触python的GUI(图形化)编程,于是通过编写扫
- 先要明白Fscanf的工作原理Fscanf在遇到\n才结束遇到\r时就会把\r替换成0这就有个问题,要注意自己的文本换行符是什么,在Wind
- 我们一般在Excel里面是使用数据连接属性里面写sql语句,或者vba里面利用ado组件执行sql语句。新版的Excel里面带上了Power
- 本文将介绍如何基于Python Django实现验证码登录功能。验证码登录是一种常见的身份验证方式,它可以有效防止恶意攻击和机器人登录。本文
- 在 Python 中,我们可以使用基本的索引操作来获取数组中的元素。然而,有时候我们需要获取一个数组的子数组,也就是只获取数组中的一部分元素
- 有些网页制 * 好者提出了这样一个问题——怎么使用Dreamweaver制作出交换图像来。今天,我向大家介绍制作复杂交换图像的方法,相信能够对
- Python反转二维数组的行和列代码如下:import numpy as nparr=np.arange(12).reshape(4,3)p
- 其实我这样做的本意是为了防止盗链!大家帮忙看一下通过代码能够根治盗链!只要不是HTTP_REFERER来源于(google.com goog
- 发布Python包上一篇介绍了如何使用别人的轮子,现在我们讨论下如何自己造轮子给别人用。作为一个流行的开源开发项目,Python拥有一个活跃
- python进行有理数运算时,希望用运算符(+ - * /)描述计算过程。只是用来写出更加自然的计算表达式。为此,python为所有算数运算
- 安装requests库之前我们需要先看一下电脑上有没有pip,可以在cmd中输入pip list查看,若出现以下内容则电脑已安装pip,否则
- 一、 简介1、 基本介绍Pillow 是 Python 中较为基础的图像处理库,主要用于图像的基本处理,比如裁剪图像、调整图像大小和图像颜色
- 导言Python官方文档对于内置函数的介绍较为简略,但这些内置函数在日常工作中却扮演着不可或缺的角色。为了更加便捷地使用和查阅这些函数,笔者
- 开发动机:最近用手机QQ浏览器下载了一些视频,视频越来越多,占用了手机内存,于是想把下载的视频传到电脑上保存,可后来发现这些视频都是m3u8
- 文件操作示例#输入文件f = open(r'D:\Python27\pro\123.bak') #输出文件fw = open
- 最近写了一些python3程序,四处能看到bytes类型,而它并不存在于python2中,这也是python3和python2显著区别之一。
- MySQL的分页似乎一直是个问题,有什么优化方法吗?网上看到网上推荐了一些分页方法,但似乎不太可行,你能点评一下吗?方法1: 直接使用数据库