当前位置: 首页 > news >正文

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字符串解析成对象 &#xff1a; var obj JSON.parse(str) 对象转化成字符串&#xff1a;var str1 JSON.stringify(obj1) <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta http-equiv"X-UA-Com…...

LabVIEW提高开发效率技巧----采用并行任务提高性能

在复杂的LabVIEW开发项目中&#xff0c;合理利用并行任务可以显著提高系统的整体性能和响应速度。并行编程是一种强大的技术手段&#xff0c;尤其适用于实时控制、数据采集以及多任务处理等场景。LabVIEW的数据流编程模型天然支持并行任务的执行&#xff0c;结合多核处理器的硬…...

裸土检测算法实际应用、裸土覆盖检测算法、裸土检测算法

裸土检测算法主要用于环境保护、农业管理、城市规划和土地管理等领域&#xff0c;通过图像识别技术来检测和识别地表上的裸露土壤。这种技术可以帮助管理者实时监控裸土面积&#xff0c;及时采取措施&#xff0c;防止水土流失、环境污染和生态退化。 一、技术实现 裸土检测算…...

深入剖析链表反转:多语言实现与高级语法特性20240924

深入剖析链表反转&#xff1a;多语言实现与高级语法特性 引言 在数据结构与算法的学习中&#xff0c;链表是基础结构之一&#xff0c;尤其在动态内存分配和操作中体现了它的重要性。今天&#xff0c;我们将通过反转单链表这一经典算法题&#xff0c;从不同编程语言的角度进行…...

【数据结构初阶】链式二叉树接口实现超详解

文章目录 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&#xff0c;将数组中的元素向右轮转 k 个位置&#xff0c;其中 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异机恢复数据库记录

场景&#xff1a;数据库服务器宕机&#xff0c;无法恢复 处理&#xff1a;使用备份资料进行异地恢复 1.此处环境为同平台、同版本&#xff08;操作系统版本可以不同&#xff0c;但数据库版本需相同&#xff09;&#xff0c;源机器和目标机器具有相同的目录结构。 2.目标机器只…...

JVM 调优篇7 调优案例4- 线程溢出

一 线程溢出 1.1 报错信息 每个 Java 线程都需要占用一定的内存空间&#xff0c;当 JVM 向底层操作系统请求创建一个新的 native 线程时&#xff0c;如果没有足够的资源分配就会报此类错误。报错信息&#xff1a;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.再次理解面向对象 本次内容大纲&#xff1a; 1.再谈构造函数 …...

云栖实录 | 阿里云 OpenLake 解决方案重磅发布:多模态数据统一纳管、引擎平权联合计算、数据共享统一读写

新一轮人工智能浪潮正在重塑世界&#xff0c;以生成式 AI 为代表的技术快速应用&#xff0c;推动了数据与智能的深化融合&#xff0c;同时也给数据基础设施带来了全新的变革与挑战。面向 AI 时代的数据基础设施如何构建&#xff1f;底层数据平台架构在 AI 时代如何演进&#xf…...

《线性代数》学渣笔记

文章目录 1 行列式1.1 克拉默法则1.2 基本性质1.3 余子式 M i j M_{ij} Mij​1.4 代数余子式 A i j ( − 1 ) i j ⋅ M i j A_{ij} (-1)^{ij} \cdot M_{ij} Aij​(−1)ij⋅Mij​1.5 具体型行列式计算&#xff08;化为基本型&#xff09;1.5.1 主对角线行列式&#xff1a;主…...

对网页聊天项目进行性能测试, 使用JMeter对于基于WebSocket开发的webChat项目的聊天功能进行测试

登录功能 包括接口的设置和csv文件配置 ​​​​​​ 这里csv文件就是使用xlsx保存数据, 然后在浏览器找个网址转成csv文件 注册功能 这里因为需要每次注册的账号不能相同, 所以用了时间函数来当用户名, 保证尽可能的给正确的注册数据, 时间函数使用方法如下 这里输入分钟, 秒…...

《程序猿之设计模式实战 · 适配器模式》

&#x1f4e2; 大家好&#xff0c;我是 【战神刘玉栋】&#xff0c;有10多年的研发经验&#xff0c;致力于前后端技术栈的知识沉淀和传播。 &#x1f497; &#x1f33b; CSDN入驻不久&#xff0c;希望大家多多支持&#xff0c;后续会继续提升文章质量&#xff0c;绝不滥竽充数…...

Elasticsearch案例

目录 一、创建索引 二、准备数据 三、环境搭建 &#xff08;1&#xff09;环境搭建 &#xff08;2&#xff09;创建实体类 &#xff08;3&#xff09;实现Repository接口 四、实现自动补全功能 五、实现高亮搜索关键字功能 &#xff08;1&#xff09;在repository接口中…...

SpringBoot 项目如何使用 pageHelper 做分页处理 (含两种依赖方式)

分页是常见大型项目都需要的一个功能&#xff0c;PageHelper是一个非常流行的MyBatis分页插件&#xff0c;它支持多数据库分页&#xff0c;无需修改SQL语句即可实现分页功能。 本文在最后展示了两种依赖验证的结果。 文章目录 一、第一种依赖方式二、第二种依赖方式三、创建数…...

这种界面和额外附加认证要求以前从来没有过

注册github账号很早就有了&#xff0c;但这种认证要求以前从来没有过。 自从上传了这个代码&#xff1a; mcp 桥接器 就多了认证要求。 发生了什么 &#xff1a;GitHub 现在要求所有活跃开发者都必须开启双重身份验证&#xff08;2FA&#xff09;&#xff0c;以保护账号不被黑…...

前端工程化:Vite与Rollup构建优化

前端工程化&#xff1a;Vite与Rollup构建优化 大家好&#xff0c;我是欧阳瑞&#xff08;Rich Own&#xff09;。今天想和大家聊聊前端工程化这个重要话题。作为一个全栈开发者&#xff0c;构建工具是日常开发中不可或缺的一部分。今天就来分享一下Vite和Rollup的构建优化技巧…...

4 款主流论文降 AI 软件实测对比!谁能 5 分钟把 AI 率降到 10% 以下

4 款主流论文降 AI 软件实测对比&#xff01;谁能 5 分钟把 AI 率降到 10% 以下 毕业季最焦虑的事——答辩前剩 3 天、AI 率还有 70%、想找一款 5 分钟就能搞定的工具。 市面上很多工具宣称"几分钟出结果"——但实测下来快的快、慢的慢、效果差距更大。这篇文章实测对…...

STM32串口屏通信避坑指南:为什么你的陶晶驰T0屏有时没反应?(附示波器调试实录)

STM32与陶晶驰串口屏通信故障深度解析&#xff1a;从波形诊断到稳定传输实战 实验室里&#xff0c;你盯着那块沉默不语的陶晶驰T0串口屏&#xff0c;STM32F103C8T6的开发板指示灯正常闪烁&#xff0c;串口调试助手显示数据已发送——但屏幕依然漆黑一片。这种"通信玄学&qu…...

从电话到流媒体:聊聊G.711、G.726这些老牌音频编码为啥还在用?

从电话到流媒体&#xff1a;G.711与G.726音频编码的生存之道 在数字音频技术日新月异的今天&#xff0c;MP3、AAC、Opus等现代编码格式早已成为流媒体和消费级应用的标配。然而&#xff0c;当你拆开一台最新的IP电话机&#xff0c;或是调试某款工业级语音设备时&#xff0c;大概…...

TQVaultAE:为《泰坦之旅》周年版打造的无限仓库管理工具

TQVaultAE&#xff1a;为《泰坦之旅》周年版打造的无限仓库管理工具 【免费下载链接】TQVaultAE Extra bank space for Titan Quest Anniversary Edition 项目地址: https://gitcode.com/gh_mirrors/tq/TQVaultAE 还在为《泰坦之旅》中堆积如山的传奇装备无处存放而烦恼…...

如何用Fetch实现高效Android文件下载:10个实用技巧

如何用Fetch实现高效Android文件下载&#xff1a;10个实用技巧 【免费下载链接】Fetch The best file downloader library for Android 项目地址: https://gitcode.com/gh_mirrors/fetch/Fetch Fetch是Android平台上最强大的文件下载管理器库之一&#xff0c;专为开发者…...

MLX90614红外测温传感器:从原理到Arduino实战应用指南

1. 项目概述&#xff1a;从接触式到非接触式的测温革新在嵌入式开发和物联网项目中&#xff0c;温度测量是一个永恒的主题。从传统的热敏电阻、DS18B20&#xff0c;到热电偶&#xff0c;我们习惯了将探头紧贴甚至刺入被测物体来获取读数。但你是否遇到过这样的困境&#xff1a;…...

【免费下载】 轻松连接Hive数据库:Hive JDBC驱动包下载指南

轻松连接Hive数据库&#xff1a;Hive JDBC驱动包下载指南 【下载地址】HiveJDBC驱动包下载 该资源文件是一个压缩包&#xff0c;使用zip格式进行压缩&#xff0c;方便用户直接解压并获取Hive JDBC驱动。解压后即可使用其中的hive-jdbc-uber-2.6.5.0-292.jar文件 项目地址: ht…...

YOLOv8改进策略【卷积层】| TGRS2024 小波变换特征分解器(WTFD)双频互补提精度 + 轻量分解保空间[特殊字符]

一、本文介绍 本文记录的是利用WTFD小波变换特征分解器优化YOLOv8的目标检测网络模型。 WTFD(小波变换特征分解器)通过Haar小波变换双迭代分解与分通道轻量化特征映射结合,为纯空间域分割网络引入互补的频域特征分支。本文利用WTFD模块,先通过点卷积增强输入空间特征的非…...