golang的RSA加密解密
参考:https://blog.csdn.net/lady_killer9/article/details/118026802
1.加密解密工具类PasswordUtil.go
package utilimport ("crypto/rand""crypto/rsa""crypto/x509""encoding/pem""fmt""log""os""runtime"
)// RSA 加密解密//生成密钥对
func GenerateRsaKey(keySize int, dirPath string) error {privateKey,err := rsa.GenerateKey(rand.Reader,keySize)if err != nil{_, file, line, _ := runtime.Caller(0)return Error(file,line+1,err.Error())}// x509derText :=x509.MarshalPKCS1PrivateKey(privateKey)// pem Blockblock := &pem.Block{Type:"rsa private key",Bytes:derText,}// just joint, caller must let dirPath rightfile,err := os.Create(dirPath+"private.pem")defer file.Close()if err != nil{_, file, line, _ := runtime.Caller(0)return Error(file,line+1,err.Error())}err = pem.Encode(file,block)if err != nil{_, file, line, _ := runtime.Caller(0)return Error(file,line+1,err.Error())}// get PublicKey from privateKeypublicKey := privateKey.PublicKeyderStream,err := x509.MarshalPKIXPublicKey(&publicKey)if err != nil{_, file, line, _ := runtime.Caller(0)return Error(file,line+1,err.Error())}block = &pem.Block{Type:"rsa public key",Bytes:derStream,}file,err = os.Create(dirPath+"public.pem")if err != nil{_, file, line, _ := runtime.Caller(0)return Error(file,line+1,err.Error())}err = pem.Encode(file, block)if err != nil{_, file, line, _ := runtime.Caller(0)return Error(file,line+1,err.Error())}return nil
}//加密
func RsaEncrypt(plainText []byte,filePath string) ([]byte, error) {// get pem.Blockblock,err := GetKey(filePath)if err != nil{_, file, line, _ := runtime.Caller(0)return nil,Error(file,line+1,err.Error())}// X509publicInterface,err := x509.ParsePKIXPublicKey(block.Bytes)if err != nil{_, file, line, _ := runtime.Caller(0)return nil,Error(file,line+1,err.Error())}publicKey,flag := publicInterface.(*rsa.PublicKey)if flag == false{_, file, line, _ := runtime.Caller(0)return nil,Error(file,line+1, "加密发生异常==================="/*errors.RsatransError*/)log.Println(file)log.Println(line)//log.Println("发生异常==============================")}// encryptcipherText, err := rsa.EncryptPKCS1v15(rand.Reader, publicKey, plainText)if err != nil{_, file, line, _ := runtime.Caller(0)return nil,Error(file,line+1,err.Error())}return cipherText,nil
}//解密
func RsaDecrypt(cipherText []byte,filePath string) (plainText []byte,err error) {// get pem.Blockblock,err := GetKey(filePath)if err != nil{_, file, line, _ := runtime.Caller(0)return nil,Error(file,line+1,err.Error())}// get privateKeyprivateKey, _ := x509.ParsePKCS1PrivateKey(block.Bytes)defer func() {if err2 := recover();err2 != nil{_, file, line, _ := runtime.Caller(0)err = Error(file,line,"解密发生异常==================")}}()// get plainText use privateKeyplainText, err3 := rsa.DecryptPKCS1v15(rand.Reader, privateKey, cipherText)if err3 != nil{_, file, line, _ := runtime.Caller(0)return nil,Error(file,line+1,err3.Error())}return plainText,err
}// 读取公钥/私钥文件,获取解码的pem块
// filePath文件路径
// 返回pem块和错误
func GetKey(filePath string) (*pem.Block,error) {file,err := os.Open(filePath)defer file.Close()if err != nil{_, file, line, _ := runtime.Caller(0)return nil,Error(file,line+1,err.Error())}fileInfo,err := file.Stat()if err != nil{_, file, line, _ := runtime.Caller(0)return nil,Error(file,line+1,err.Error())}buf := make([]byte,fileInfo.Size())_, err = file.Read(buf)if err != nil{_, file, line, _ := runtime.Caller(0)return nil,Error(file,line+1,err.Error())}block, _ := pem.Decode(buf)return block,err
}// 错误格式化
func Error(file string,line int,err string) error {return fmt.Errorf("file:%s line:%d error:%s",file,line,err)
}
2.测试
func Rsapassword(c *gin.Context, loginBody *sysEntity.LoginBody) []map[string]interface{} {var resultList []map[string]interface{}//参数接收//userName := loginBody.UserName//password := loginBody.Password//生成密钥对err := sysUtil.GenerateRsaKey(1024, "./")if err != nil {log.Println("==================生成密钥对发生异常")fmt.Println(err)}//加密plainText := []byte("123456")cipherText, err := sysUtil.RsaEncrypt(plainText, "./public.pem")if err != nil {fmt.Println(err)log.Println("==================加密发生异常")}fmt.Printf("加密后为:%s\n",cipherText)//解密plainText,err = sysUtil.RsaDecrypt(cipherText,"./private.pem")if err!=nil{log.Println("==================解密发生异常")fmt.Println(err)}fmt.Printf("解密后为:%s\n",plainText)return resultList
}
相关文章:

golang的RSA加密解密
参考:https://blog.csdn.net/lady_killer9/article/details/118026802 1.加密解密工具类PasswordUtil.go package utilimport ("crypto/rand""crypto/rsa""crypto/x509""encoding/pem""fmt""log"&qu…...
深度学习-梯度消失/爆炸产生的原因、解决方法
在深度学习模型中,梯度消失和梯度爆炸现象是限制深层神经网络有效训练的主要问题之一,这两个现象从本质上来说是由链式求导过程中梯度的缩小或增大引起的。特别是在深层网络中,若初始梯度在反向传播过程中逐层被放大或缩小,最后导…...
MVC(Model-View-Controller)模式概述
MVC(Model-View-Controller)是一种设计模式,最初由 Trygve Reenskaug 在 1970 年代提出,并在 Smalltalk 编程环境中得到了广泛应用。MVC 模式旨在实现用户界面和业务逻辑的分离,以增强应用程序的可维护性、可扩展性和复…...

数据结构 —— 红黑树
目录 1. 初识红黑树 1.1 红黑树的概念 1.2 红⿊树的规则 1.3 红黑树如何确保最长路径不超过最短路径的2倍 1.4 红黑树的效率:O(logN) 2. 红黑树的实现 2.1 红黑树的基础结构框架 2.2 红黑树的插⼊ 2.2.1 情况1:变色 2.2.2 情况2:单旋变色 2.2…...
《功能高分子学报》
《功能高分子学报》 中国标准连续出版物号:CN 31-1633/O6,国际标准连续出版物号:ISSN 1008-9357,邮发代号:4-629,刊期:双月刊。 《功能高分子学报》主要刊登功能高分子和其他高分子领域具有创新意义的学术…...

Linux特种文件系统--tmpfs文件系统
tmpfs类似于RamDisk(只能使用物理内存),使用虚拟内存(简称VM)子系统的页面存储文件。tmpfs完全依赖VM,遵循子系统的整体调度策略。说白了tmpfs跟普通进程差不多,使用的都是某种形式的虚拟内存&a…...

《基于STMF103的FreeRTOS内核移植》
目录 1.FreeRTOS资料下载与出处 1.1官网下载,网址:www.freertos.org 1.2在正点原子官网,任意STM32F1的开发板资料A盘里, 2.FreeRTOS移植重要文件讲解 2.1 FreeRTOS与FreeRTOS-Plus文件夹 2.2 Demo、Lincence、Source ●Demo文件…...
一七二、Vue3性能优化方式
Vue 3 的性能优化相较于 Vue 2 有了显著提升,利用新特性和改进方法可以更高效地构建和优化应用。以下是 Vue 3 的常见性能优化方法及示例。 1. 使用组合式 API (Composition API) Vue 3 引入的组合式 API,通过逻辑拆分和复用来实现更高效的代码组织和性…...

软件测试--BUG篇
博主主页: 码农派大星. 数据结构专栏:Java数据结构 数据库专栏:MySQL数据库 JavaEE专栏:JavaEE 软件测试专栏:软件测试 关注博主带你了解更多知识 目录 1. 软件测试的⽣命周期 2. BUG 1. BUG 的概念 2. 描述bug的要素 3.bug级别 4.bug的⽣命周期 5 与开发产⽣争执怎…...
Scikit-learn和Keras简介
一,Scikit-learn是一个开源的机器学习库,用于Python编程语言。它建立在NumPy、SciPy和matplotlib这些科学计算库之上,提供了简单有效的数据挖掘和数据分析工具。Scikit-learn库包含了许多用于分类、回归、聚类和降维的算法,包括支…...

python在word的页脚插入页码
1、插入简易页码 import win32com.client as win32 from win32com.client import constants import osdoc_app win32.gencache.EnsureDispatch(Word.Application)#打开word应用程序 doc_app.Visible Truedoc doc_app.Documents.Add() footer doc.Sections(1).Footers(cons…...
Java面试题十四
一、Java中的JNI(Java Native Interface)是什么?它有什么用途? Java中的JNI(Java Native Interface)是Java提供的一种编程框架,它允许Java代码与本地(Native)代码&#x…...
yarn : 无法加载文件,未对文件 进行数字签名。无法在当前系统上运行该脚本。
执行这个命令时报错:yarn --registryhttps://registry.npm.taobao.org yarn : 无法加载文件 C:\Users\Administrator\AppData\Roaming\npm\yarn.ps1。未对文件 C:\Users\Administ rator\AppData\Roaming\npm\yarn.ps1 进行数字签名。无法在当前系统上运行该脚本。有…...

Hadoop——HDFS
什么是HDFS HDFS(Hadoop Distributed File System)是Apache Hadoop的核心组件之一,是一个分布式文件系统,专门设计用于在大规模集群上存储和管理海量数据。它的设计目标是提供高吞吐量的数据访问和容错能力,以支持大数…...

计算机的一些基础知识
文章目录 编程语言 程序 所谓程序,就是 一组指令 以及 这组指令要处理的数据。狭义上来说,程序对我们来说,通常表现为一组文件。 程序 指令 指令要处理的数据。 编程语言发展 机器语言:0、1 二进制构成汇编语言:…...

学习RocketMQ(记录了个人艰难学习RocketMQ的笔记)
一、部署单点RocketMQ Docker 部署 RocketMQ (图文并茂超详细)_docker 部署rocketmq-CSDN博客 这个博主讲的很好,可食用,替大家实践了一遍 二、原理篇 为什么使用RocketMQ: 为什么选择RocketMQ | RocketMQ 关于一些原理,感觉…...

【设计模式】策略模式定义及其实现代码示例
文章目录 一、策略模式1.1 策略模式的定义1.2 策略模式的参与者1.3 策略模式的优点1.4 策略模式的缺点1.5 策略模式的使用场景 二、策略模式简单实现2.1 案例描述2.2 实现代码 三、策略模式的代码优化3.1 优化思路3.2 抽象策略接口3.3 上下文3.4 具体策略实现类3.5 测试 参考资…...

list与iterator的之间的区别,如何用斐波那契数列探索yield
问题 list与iterator的之间的区别是什么?如何用斐波那契数列探索yield? 2 方法 将数据转换成list,通过对list索引和切片操作,以及可以进行添加、删除和修改元素。 iterator是一种对象,用于遍历可迭代对象(如列表、元组…...

抖音店铺数据也就是抖店,如何使用小店数据集来挖掘价值?
抖音商家现在基本达到二百多万家抖店,有一些公司可能会根据开放的数据研究行业分布、GMV等等,就像是也出了专业的一些平台如“蝉妈妈”、“达多多”,对我来说受限制就是难受。 当然也有很多大型合法的数据平台有抖店数据集,但…...

KubeVirt 安装和配置 Windows虚拟机
本文将将介绍如何安装 KubeVirt 和使用 KubeVirt 配置 Windows 虚拟机。 前置条件 准备 Ubuntu 操作系统,一定要安装图形化界面。 安装 Docker(最新版本) 安装 libvirt 和 TigerVNC: apt install libvirt-daemon-system libvir…...
应用升级/灾备测试时使用guarantee 闪回点迅速回退
1.场景 应用要升级,当升级失败时,数据库回退到升级前. 要测试系统,测试完成后,数据库要回退到测试前。 相对于RMAN恢复需要很长时间, 数据库闪回只需要几分钟。 2.技术实现 数据库设置 2个db_recovery参数 创建guarantee闪回点,不需要开启数据库闪回。…...

Qt/C++开发监控GB28181系统/取流协议/同时支持udp/tcp被动/tcp主动
一、前言说明 在2011版本的gb28181协议中,拉取视频流只要求udp方式,从2016开始要求新增支持tcp被动和tcp主动两种方式,udp理论上会丢包的,所以实际使用过程可能会出现画面花屏的情况,而tcp肯定不丢包,起码…...
逻辑回归:给不确定性划界的分类大师
想象你是一名医生。面对患者的检查报告(肿瘤大小、血液指标),你需要做出一个**决定性判断**:恶性还是良性?这种“非黑即白”的抉择,正是**逻辑回归(Logistic Regression)** 的战场&a…...

【网络安全产品大调研系列】2. 体验漏洞扫描
前言 2023 年漏洞扫描服务市场规模预计为 3.06(十亿美元)。漏洞扫描服务市场行业预计将从 2024 年的 3.48(十亿美元)增长到 2032 年的 9.54(十亿美元)。预测期内漏洞扫描服务市场 CAGR(增长率&…...
基于数字孪生的水厂可视化平台建设:架构与实践
分享大纲: 1、数字孪生水厂可视化平台建设背景 2、数字孪生水厂可视化平台建设架构 3、数字孪生水厂可视化平台建设成效 近几年,数字孪生水厂的建设开展的如火如荼。作为提升水厂管理效率、优化资源的调度手段,基于数字孪生的水厂可视化平台的…...

2021-03-15 iview一些问题
1.iview 在使用tree组件时,发现没有set类的方法,只有get,那么要改变tree值,只能遍历treeData,递归修改treeData的checked,发现无法更改,原因在于check模式下,子元素的勾选状态跟父节…...
Web中间件--tomcat学习
Web中间件–tomcat Java虚拟机详解 什么是JAVA虚拟机 Java虚拟机是一个抽象的计算机,它可以执行Java字节码。Java虚拟机是Java平台的一部分,Java平台由Java语言、Java API和Java虚拟机组成。Java虚拟机的主要作用是将Java字节码转换为机器代码&#x…...

STM32---外部32.768K晶振(LSE)无法起振问题
晶振是否起振主要就检查两个1、晶振与MCU是否兼容;2、晶振的负载电容是否匹配 目录 一、判断晶振与MCU是否兼容 二、判断负载电容是否匹配 1. 晶振负载电容(CL)与匹配电容(CL1、CL2)的关系 2. 如何选择 CL1 和 CL…...
Linux系统部署KES
1、安装准备 1.版本说明V008R006C009B0014 V008:是version产品的大版本。 R006:是release产品特性版本。 C009:是通用版 B0014:是build开发过程中的构建版本2.硬件要求 #安全版和企业版 内存:1GB 以上 硬盘…...

WPF八大法则:告别模态窗口卡顿
⚙️ 核心问题:阻塞式模态窗口的缺陷 原始代码中ShowDialog()会阻塞UI线程,导致后续逻辑无法执行: var result modalWindow.ShowDialog(); // 线程阻塞 ProcessResult(result); // 必须等待窗口关闭根本问题:…...