golang学习笔记25——golang 实现 MD5加密、RSA加密 和 Base64编码
- 推荐学习文档
- golang应用级os框架,欢迎star
- golang应用级os框架使用案例,欢迎star
- 案例:基于golang开发的一款超有个性的旅游计划app经历
- golang实战大纲
- golang优秀开发常用开源库汇总
- 想学习更多golang知识,这里有免费的golang学习笔记专栏
文章目录
- 引言
- MD5 实现
- RSA 实现
- Base64 实现
- 总结
引言
在开发过程中,经常会涉及到数据加密、编码等操作。本文将详细介绍在 Go 语言中如何实现 MD5 哈希、RSA 加密以及 Base64 编码,并通过代码示例来加深理解。
MD5 实现
- MD5(Message-Digest Algorithm 5)是一种广泛使用的哈希函数,用于生成数据的固定长度的哈希值。在 Go 语言中,可以使用crypto/md5包来实现 MD5 计算。
-
- 源码可直接使用
- 以下是一个简单的示例代码:
package mainimport ("crypto/md5""fmt""io"
)func main() {data := []byte("This is a test string for MD5.")hash := md5.New()io.WriteString(hash, string(data))md5Sum := hash.Sum(nil)fmt.Printf("MD5 sum: %x\n", md5Sum)
}
在上述代码中,首先创建了一个md5.Hash对象,然后通过io.WriteString将数据写入哈希对象中,最后通过Sum方法获取哈希值。
RSA 实现
- RSA(Rivest-Shamir-Adleman)是一种非对称加密算法。在 Go 语言中,crypto/rsa包提供了对 RSA 算法的支持。
- 以下是一个生成 RSA 密钥对并进行加密和解密的示例:
package mainimport ("crypto/rand""crypto/rsa""crypto/x509""encoding/pem""fmt"
)func main() {// 生成 RSA 私钥privateKey, err := rsa.GenerateKey(rand.Reader, 2048)if err!= nil {fmt.Println("Error generating private key:", err)return}// 将私钥转换为 PEM 格式privateKeyPEM := &pem.Block{Type: "RSA PRIVATE KEY",Bytes: x509.MarshalPKCS1PrivateKey(privateKey),}// 保存私钥到文件(可省略)privateKeyFile, err := os.Create("private.pem")if err!= nil {fmt.Println("Error creating private key file:", err)return}pem.Encode(privateKeyFile, privateKeyPEM)privateKeyFile.Close()// 获取公钥publicKey := privateKey.PublicKey// 将公钥转换为 PEM 格式publicKeyPEM := &pem.Block{Type: "RSA PUBLIC KEY",Bytes: x509.MarshalPKCS1PublicKey(&publicKey),}// 保存公钥到文件(可省略)publicKeyFile, err := os.Create("public.pem")if err!= nil {fmt.Println("Error creating public key file:", err)return}pem.Encode(publicKeyFile, publicKeyPEM)publicKeyFile.Close()// 要加密的数据data := []byte("This is a test string for RSA.")// 使用公钥加密encryptedData, err := rsa.EncryptPKCS1v15(rand.Reader, &publicKey, data)if err!= nil {fmt.Println("Error encrypting data:", err)return}fmt.Printf("Encrypted data: %x\n", encryptedData)// 使用私钥解密decryptedData, err := rsa.DecryptPKCS1v15(rand.Reader, privateKey, encryptedData)if err!= nil {fmt.Println("Error decrypting data:", err)return}fmt.Printf("Decrypted data: %s\n", decryptedData)
}
在上述代码中,首先生成了 RSA 密钥对,然后将密钥转换为 PEM 格式并可以选择保存到文件中。接着使用公钥对数据进行加密,再使用私钥进行解密。
Base64 实现
- Base64 是一种用于将二进制数据编码为 ASCII 字符串的编码方式。在 Go 语言中,encoding/base64包提供了对 Base64 编码和解码的功能。
- 源码可直接使用
- 以下是一个简单的示例:
package mainimport ("encoding/base64""fmt"
)func main() {data := []byte("This is a test string for Base64.")encodedData := base64.StdEncoding.EncodeToString(data)fmt.Printf("Encoded data: %s\n", encodedData)decodedData, err := base64.StdEncoding.DecodeString(encodedData)if err!= nil {fmt.Println("Error decoding data:", err)return}fmt.Printf("Decoded data: %s\n", decodedData)
}
在上述代码中,使用base64.StdEncoding.EncodeToString方法将数据进行 Base64 编码,使用DecodeString方法进行解码。
总结
通过以上内容,我们详细介绍了在 Go 语言中实现 MD5 哈希、RSA 加密以及 Base64 编码的方法,并给出了相应的代码示例。这些加密和编码技术在实际开发中具有广泛的应用,开发者可以根据具体需求灵活运用。
以上文章内容可以根据你的实际需求进行调整,希望对你有所帮助。
相关文章:
golang学习笔记25——golang 实现 MD5加密、RSA加密 和 Base64编码
推荐学习文档 golang应用级os框架,欢迎stargolang应用级os框架使用案例,欢迎star案例:基于golang开发的一款超有个性的旅游计划app经历golang实战大纲golang优秀开发常用开源库汇总想学习更多golang知识,这里有免费的golang学习笔…...
2024海外电商数据分析之印度篇
在2024年,印度电商市场继续保持着强劲的增长势头,成为全球电商领域中的一个亮点。根据Inc42发布的《2024年上半年印度电商市场报告》,印度电商市场规模已经达到1160亿美元,预计在2023年至2030年间,将以19%的复合年增长…...
JavaWeb纯小白笔记02:Tomcat的使用:发布项目的三种方式、配置虚拟主机、配置用户名和密码
通过Tomcat进行发布项目的目的是为了提供项目的访问能力:Tomcat作为Web服务器,能够处理HTTP请求和响应,将项目的内容提供给用户进行访问和使用。 一.Tomcat发布项目的三种方式: 第一种:直接在Tomcat文件夹里的webapp…...
为什么数据需要 QA 流程
当有人问我做什么工作时,我会说我是一名数据质量保证 (QA) 工程师。他们并不真正理解我的意思。“嗯,我做数据测试,”我试图解释,但常常无济于事。我有一些从事技术和软件开发的朋友,他们不太了解数据测试是什么&#…...
Spring Boot 学习之路 -- 基础认知
前言 最近因为业务需要,被拉去研究后端的项目,代码框架基于 Spring Boot,对我来说完全小白,需要重新学习研究…出于个人习惯,会以 Blog 文章的方式做一些记录,文章内容基本来源于「 Spring Boot 从入门到精…...
JavaScript --json格式字符串和对象的转化
json字符串解析成对象 : var obj JSON.parse(str) 对象转化成字符串:var str1 JSON.stringify(obj1) <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta http-equiv"X-UA-Com…...
LabVIEW提高开发效率技巧----采用并行任务提高性能
在复杂的LabVIEW开发项目中,合理利用并行任务可以显著提高系统的整体性能和响应速度。并行编程是一种强大的技术手段,尤其适用于实时控制、数据采集以及多任务处理等场景。LabVIEW的数据流编程模型天然支持并行任务的执行,结合多核处理器的硬…...
裸土检测算法实际应用、裸土覆盖检测算法、裸土检测算法
裸土检测算法主要用于环境保护、农业管理、城市规划和土地管理等领域,通过图像识别技术来检测和识别地表上的裸露土壤。这种技术可以帮助管理者实时监控裸土面积,及时采取措施,防止水土流失、环境污染和生态退化。 一、技术实现 裸土检测算…...
深入剖析链表反转:多语言实现与高级语法特性20240924
深入剖析链表反转:多语言实现与高级语法特性 引言 在数据结构与算法的学习中,链表是基础结构之一,尤其在动态内存分配和操作中体现了它的重要性。今天,我们将通过反转单链表这一经典算法题,从不同编程语言的角度进行…...
【数据结构初阶】链式二叉树接口实现超详解
文章目录 1. 节点定义2. 前中后序遍历2. 1 遍历规则2. 2 遍历实现2. 3 结点个数2. 3. 1 二叉树节点个数2. 3. 2 二叉树叶子节点个数2. 3. 3 二叉树第k层节点个数 2. 4 二叉树查找值为x的节点2. 5 二叉树层序遍历2. 6 判断二叉树是否是完全二叉树 3. 二叉树性质 1. 节点定义 用…...
力扣189 轮转数组 Java版本
文章目录 题目描述代码 题目描述 给定一个整数数组 nums,将数组中的元素向右轮转 k 个位置,其中 k 是非负数。 示例 1: 输入: nums [1,2,3,4,5,6,7], k 3 输出: [5,6,7,1,2,3,4] 解释: 向右轮转 1 步: [7,1,2,3,4,5,6] 向右轮转 2 步: [6,7,1,2,3,4…...
RMAN异机恢复数据库记录
场景:数据库服务器宕机,无法恢复 处理:使用备份资料进行异地恢复 1.此处环境为同平台、同版本(操作系统版本可以不同,但数据库版本需相同),源机器和目标机器具有相同的目录结构。 2.目标机器只…...
JVM 调优篇7 调优案例4- 线程溢出
一 线程溢出 1.1 报错信息 每个 Java 线程都需要占用一定的内存空间,当 JVM 向底层操作系统请求创建一个新的 native 线程时,如果没有足够的资源分配就会报此类错误。报错信息:java.lang.outofmemoryError:unable to create new Native Thr…...
C++类与对象(三)
目录 1.再谈构造函数 1.1 构造函数体赋值 1.2 初始化列表 1.3 explicit关键字 2.STATIC成员 2.1 概念 2.2 特性 3.C中成员初始化的新玩法 4.友元 4.1 友元函数 4.2 友元类 5.内部类 6.再次理解封装 7.再次理解面向对象 本次内容大纲: 1.再谈构造函数 …...
云栖实录 | 阿里云 OpenLake 解决方案重磅发布:多模态数据统一纳管、引擎平权联合计算、数据共享统一读写
新一轮人工智能浪潮正在重塑世界,以生成式 AI 为代表的技术快速应用,推动了数据与智能的深化融合,同时也给数据基础设施带来了全新的变革与挑战。面向 AI 时代的数据基础设施如何构建?底层数据平台架构在 AI 时代如何演进…...
《线性代数》学渣笔记
文章目录 1 行列式1.1 克拉默法则1.2 基本性质1.3 余子式 M i j M_{ij} Mij1.4 代数余子式 A i j ( − 1 ) i j ⋅ M i j A_{ij} (-1)^{ij} \cdot M_{ij} Aij(−1)ij⋅Mij1.5 具体型行列式计算(化为基本型)1.5.1 主对角线行列式:主…...
对网页聊天项目进行性能测试, 使用JMeter对于基于WebSocket开发的webChat项目的聊天功能进行测试
登录功能 包括接口的设置和csv文件配置 这里csv文件就是使用xlsx保存数据, 然后在浏览器找个网址转成csv文件 注册功能 这里因为需要每次注册的账号不能相同, 所以用了时间函数来当用户名, 保证尽可能的给正确的注册数据, 时间函数使用方法如下 这里输入分钟, 秒…...
《程序猿之设计模式实战 · 适配器模式》
📢 大家好,我是 【战神刘玉栋】,有10多年的研发经验,致力于前后端技术栈的知识沉淀和传播。 💗 🌻 CSDN入驻不久,希望大家多多支持,后续会继续提升文章质量,绝不滥竽充数…...
Elasticsearch案例
目录 一、创建索引 二、准备数据 三、环境搭建 (1)环境搭建 (2)创建实体类 (3)实现Repository接口 四、实现自动补全功能 五、实现高亮搜索关键字功能 (1)在repository接口中…...
SpringBoot 项目如何使用 pageHelper 做分页处理 (含两种依赖方式)
分页是常见大型项目都需要的一个功能,PageHelper是一个非常流行的MyBatis分页插件,它支持多数据库分页,无需修改SQL语句即可实现分页功能。 本文在最后展示了两种依赖验证的结果。 文章目录 一、第一种依赖方式二、第二种依赖方式三、创建数…...
Engram:解锁AI潜能,系统优化新高度!
Engram是一种基于LLM的智能体研究者架构,旨在解决系统优化中AI的两个关键局限:进化邻域偏差和连贯性上限。通过将长时程探索与单一上下文窗口解耦,Engram组织一系列智能体迭代设计、测试和分析机制。每次运行结束时,智能体将代码快…...
Python结合OCR技术实现高效发票信息提取与自动化处理
1. 为什么需要自动提取发票信息? 每次月底整理报销单据的时候,你是不是也经常对着堆积如山的发票发愁?一张张手动录入发票号码、金额、开票日期,不仅效率低下还容易出错。我去年在一家电商公司做财务系统优化时,发现财…...
AudioLDM-S与LangGraph:构建音效生成工作流引擎
AudioLDM-S与LangGraph:构建音效生成工作流引擎 1. 引言 想象一下这样的场景:电影制作人需要为一场雨夜追逐戏配乐,传统的工作流程需要先搜索音效库,筛选合适的雨声、脚步声、轮胎摩擦声,然后进行剪辑、混音…...
Dirsearch字典玄学:从默认字典到AI生成,我的扫描效率提升300%的秘密
Dirsearch字典玄学:从默认字典到AI生成,我的扫描效率提升300%的秘密 在Web安全测试的战场上,目录扫描工具就像侦察兵手中的望远镜,而字典则是望远镜的镜片质量。从业五年来,我见证了太多安全工程师将90%的时间浪费在无…...
weixin273基于微信小程序的刷题系统的设计与实现+springboot(文档+源码)_kaic
第4章 系统实现4.1登录功能模块的实现登录功能包括用户登录和管理员登录,在登录界面设计中包括用户名和密码、身份的检验。用户名和密码、身份的检验过程由数据库自动完成,此过程需要1秒左右。首先由用户填写账号和密码,然后选择身份…...
3步打造跨设备开发工作站:code-server全场景部署指南
3步打造跨设备开发工作站:code-server全场景部署指南 【免费下载链接】code-server VS Code in the browser 项目地址: https://gitcode.com/GitHub_Trending/co/code-server 作为开发者,你是否曾面临设备限制带来的开发困境?高性能电…...
OWL ADVENTURE应用场景解析:如何用AI助手提升工作效率
OWL ADVENTURE应用场景解析:如何用AI助手提升工作效率 1. 为什么选择OWL ADVENTURE作为AI助手 在当今快节奏的工作环境中,我们每天都要处理大量视觉信息——从产品图片到数据图表,从设计稿到文档扫描件。传统的工作流程往往需要人工逐一查看…...
Simulink模型加密二选一:是选‘受保护模型’还是自己写S-Function?一份给嵌入式代码生成者的选择指南
Simulink模型加密实战:受保护模型与S-Function的深度技术选型 在嵌入式系统开发中,Simulink模型往往承载着核心算法和知识产权。当需要与团队协作或交付给客户时,如何在保证模型可用性的同时防止核心逻辑被窥探或篡改?这成为每个嵌…...
告别996!用Google Antigravity的Agent-First模式,5分钟搞定React Native与Android原生桥接模块
告别996!用Google Antigravity的Agent-First模式,5分钟搞定React Native与Android原生桥接模块 如果你是一位长期奋战在Android与React Native混合开发一线的工程师,一定对"桥接模块"这个词汇又爱又恨。每当产品经理提出"我们…...
从DataBinding到Compose:一个老Android的UI数据绑定演进思考
从DataBinding到Compose:一个老Android的UI数据绑定演进思考 作为一名从Eclipse时代走过来的Android开发者,我见证了UI开发方式的多次变革。从最初手工调用findViewById的繁琐,到ButterKnife的注解简化,再到DataBinding带来的声明…...
