golang 使用AES加密

在使用AES加密数据后,将加密结果使用base64.StdEncoding.EncodeToString处理的原因是多方面的:

  1. 可读性:AES加密后的数据通常是二进制格式,直接查看或处理这些二进制数据不方便也不直观。Base64编码将这些二进制数据转换为ASCII字符,更易于在各种文本编辑器或系统中查看和传输。

  2. 兼容性:二进制数据直接存储或传输时可能会遇到问题,因为某些系统可能会错误地解释二进制数据中的控制字符,或者在处理二进制数据时可能会出现数据损坏。Base64编码的数据可以通过几乎所有文本处理系统而不会引起解析或格式错误。

  3. 数据完整性:使用Base64编码可以确保加密数据在存储或传输过程中的完整性,因为它将数据转换为文本格式,减少了因为环境差异导致的数据处理错误。

  4. 网络传输:在网络传输中,有些协议可能仅设计用于传输文本数据。使用Base64编码可以将二进制数据“伪装”成文本数据,从而允许这些数据通过仅支持文本数据的网络协议传输。

综上所述,使用base64.StdEncoding.EncodeToString处理AES加密后的数据是为了提高数据的可读性、兼容性和传输效率,同时保证数据的完整性。

package mainimport ("crypto/aes""crypto/cipher""crypto/rand""encoding/base64""fmt""io"
)func main() {// 原始数据plaintext := []byte("Hello, World!")// 32 字节的 key (对应 AES-256)key := []byte("01234567890123456789012345678901")// 加密ciphertext, err := encryptCBC(key, plaintext)if err != nil {panic(err)}fmt.Printf("加密后的数据: %s\n", base64.StdEncoding.EncodeToString(ciphertext))// 解密decrypted, err := decryptCBC(key, ciphertext)if err != nil {panic(err)}fmt.Printf("解密后的数据: %s\n", decrypted)
}func encryptCBC(key, plaintext []byte) ([]byte, error) {block, err := aes.NewCipher(key)if err != nil {return nil, err}// 使用 CBC 模式加密iv := make([]byte, aes.BlockSize)if _, err := io.ReadFull(rand.Reader, iv); err != nil {return nil, err}// 对齐块大小padding := aes.BlockSize - (len(plaintext) % aes.BlockSize)paddedPlaintext := append(plaintext, byte(padding))for i := 0; i< padding-1; i++ {paddedPlaintext = append(paddedPlaintext, byte(0))}mode := cipher.NewCBCEncrypter(block, iv)ciphertext := make([]byte, len(paddedPlaintext))mode.CryptBlocks(ciphertext, paddedPlaintext)// 将 iv 附加到密文前面result := append(iv, ciphertext...)return result, nil
}func decryptCBC(key, ciphertext []byte) ([]byte, error) {block, err := aes.NewCipher(key)if err != nil {return nil, err}if len(ciphertext) < aes.BlockSize {return nil, fmt.Errorf("ciphertext too short")}// 从密文中提取 iviv := ciphertext[:aes.BlockSize]ciphertext = ciphertext[aes.BlockSize:]// 使用 CBC 模式解密mode := cipher.NewCBCDecrypter(block, iv)plaintext := make([]byte, len(ciphertext))mode.CryptBlocks(plaintext, ciphertext)// 移除填充padding := int(plaintext[len(plaintext)-1])plaintext = plaintext[:len(plaintext)-padding]return plaintext, nil
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/767118.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Kruskal最小生成树【详细解释+动图图解】【sort中的cmp函数】 【例题:洛谷P3366 【模板】最小生成树】

文章目录 Kruskal算法简介Kruskal算法前置知识sort 中的cmp函数 算法思考样例详细示范与解释kruskal模版code↓ 例题&#xff1a;洛谷P3366 【模板】最小生成树code↓完结撒花QWQ Kruskal算法简介 K r u s k a l Kruskal Kruskal 是基于贪心算法的 M S T MST MST 算法&#xff…

导师坚鹏:厦门火炬高新区数字化转型战略蓝图从规划到落地培训

厦门火炬高新区战略制胜&#xff1a;数字化转型战略蓝图从规划到落地培训 厦门国家火炬高技术产业开发区&#xff08;简称“厦门国家火炬高新区”&#xff09;1991年被国务院批准为全国首批国家级高新区&#xff0c;是全国三个以“火炬”冠名的国家高新区之一。目前&#xff0c…

CPU密集的高效访问和数据安全

import asyncio import concurrent.futures import random # 全局变量&#xff0c;用于存储计算结果的列表 list1 [] list2 [] lock asyncio.Lock() # 异步锁 # CPU计算密集型任务 async def cpu_intensive_task(): global list1, list2 # 获取异步锁 async with…

Excel通过下拉菜单,显示不同图片

背景&#xff1a;有的时候需要通过更改下拉菜单来改变对应的 值/ 图片。 如果是数值的话就是我们常常用的Vlookup&#xff0c;这个可以很简单的实现这个功能。&#xff08;这个如果不知道请自行百度&#xff09; 但是如果是图片呢&#xff1f;这个就不常见了&#xff0c;那么…

Unity中关于SendMessage方法

在Unity中&#xff0c;SendMessage 方法用于在游戏对象及其所有子对象上调用指定名称的方法。这种方法可以用于在不需要知道接收方的确切类型的情况下&#xff0c;向游戏对象发送消息。 基本语法如下&#xff1a; void SendMessage(string methodName, object value null, S…

机器学习:随机森林算法

随机森林算法 决策树与随机森林随机森林 决策树与随机森林 随机森林可以看作一个决策树的集合&#xff0c;由n个子训练集得到的决策树组成。 决策树&#xff08;Decision tree&#xff09;是一种特殊的树结构&#xff0c;由一个决策图和可能的结果&#xff08;例如成本和风险…

java使用socket实现一个简单的聊天室

1. 服务端 import java.io.IOException; import java.net.ServerSocket; import java.net.Socket; import java.util.ArrayList; import java.util.List;public class ChatServer {private static final int PORT 8070;private static List<ClientHandler> clients ne…

芯片工程系列(5)2.5D 3D封装

0 英语缩写 硅通孔&#xff08;Through Silicon Via&#xff0c;TSV&#xff09;硅中介层&#xff08;Silicon Interposer&#xff09;物理气象沉淀法&#xff08;Physical Vapor Deposition&#xff0c;PVD&#xff09;DRIE、CVD、PVD、CMP等设备CoWoS&#xff08;Chip on Wa…

【开发环境搭建篇】Nacos的安装和配置

作者介绍&#xff1a;本人笔名姑苏老陈&#xff0c;从事JAVA开发工作十多年了&#xff0c;带过大学刚毕业的实习生&#xff0c;也带过技术团队。最近有个朋友的表弟&#xff0c;马上要大学毕业了&#xff0c;想从事JAVA开发工作&#xff0c;但不知道从何处入手。于是&#xff0…

利用K8S Statefulset搭建Etcd集群 - 本地存储

目录 概述测试环境yaml配置service.yamlcluster.yaml Q&A参考链接 概述 公司因项目需要使用K8S部署ETCD集群供其他业务调用&#xff0c;网上搜索了解了下&#xff0c;一般K8S搭建ETCD集群大部分都是使用Etcd Operator来搭建。但是公司的项目运行在离线ARM架构平台&#xf…

安卓手机系统跳过app启动广告软件

跳过广告关于此应用声明&#xff1a; 应用利用了安卓系统的辅助功能API&#xff0c;可以读取您手机屏幕上显示的所有内容&#xff0c;并且可以以您的名义进行屏幕点击等操作。* 轻量无广告&#xff0c;不联网&#xff0c;也不需要任何权限&#xff1b;* 请务必在系统设置中开启…

【C++】分球

题目描述 7个人分球&#xff0c;共有n个球&#xff0c;所有人得到的球必须相等。请输出最少剩下的球数。 输入 输入一行一个正整数n&#xff08;可能存在前导零&#xff09;。 输出 输出一行一个整数&#xff0c;如题所述答案。 样例输入 Copy 50样例输出 Copy 1提示 …

Redis中AOF、RDB和复制功能对过期键的处理

AOF、RDB和复制功能对过期键的处理 生成RDB文件 在执行SAVE命令或者BGSAVE命令创建一个新的RDB文件时&#xff0c;程序会对数据库中的键进行检查&#xff0c;已过期的键不会被保存到新创建的RDB文件中。 例子 举个例子&#xff0c;如果数据库中包含三个键k1、k2、k3&#x…

【目标检测实验系列】AutoDL线上GPU服务器租用流程以及如何用Pycharm软件远程连接服务器进行模型训练 (以Pycharm远程训练Yolov5项目为例子 超详细)

目录 1. 文章主要内容2. 租用AutoDL服务器详细教程2.1 注册AutoDL账号&#xff0c;并申请学生认证(学生认证有优惠&#xff0c;如果不是学生可以忽略此点)2.2 算力市场选择GPU&#xff0c;并选择初始化配置环境2.3 控制台参数解析&#xff0c;并使用相关参数登录Xftp(Windows与…

LangChain核心模块 Retrieval——文本分割

Text Splitters 文本分隔 检索的关键部分时仅获取文档的相关部分&#xff0c;主要任务之一是将大文档分割为更小的块。 最简单的例子是&#xff0c;将长文档分割成更小的块&#xff0c;以适合模型的上下文窗口。 LangChain 有许多内置的文档转换器&#xff0c;可以轻松地拆…

Office办公软件之word的使用(一)

前几天调整公司招标文件的格式&#xff0c;中途遇到一些问题&#xff0c;感觉自己还不是太熟悉操作&#xff0c;通过查阅资料&#xff0c;知道了正确的操作&#xff0c;就想着给记下来。如果再次遇到&#xff0c;也能很快地找到解决办法。 一、怎么把标题前的黑点去掉 解决办法…

[ C++ ] STL---list的模拟实现

目录 结点类的模拟实现 迭代器类的模拟实现 构造函数 前置与后置 前置- -与后置 - - 与 !运算符重载 * 运算符重载 -> 运算符重载 普通迭代器总体实现代码 list类的实现 list类的成员变量 构造函数 迭代器 insert(&#xff09; erase() push_front/push_back…

Qt-QDialog非模态置于窗口之上且操作主窗口不隐藏dialog的方法

方法为&#xff1a; QDialog* dialog new QDialog; dialog->setParent(this, dialog->windowFlags()); dialog->show(); dialog->raise();QDialog继承自QWidget&#xff0c;setParent方法会重置其windowFlags&#xff0c;因此我们将其原始windowFlags传入作为参数…

ffmpeg/ffplay指令

ffplay 1、音频 (1)、播放PCM文件: ffplay -ar 8000 -ac 1 -f s16le input.pcm -ar 8000 设置采样率为8000 Hz。 -ac 1 设置声道数为1&#xff08;单声道&#xff09;。 -f s16le 指定音频格式为16位小端有符号整数&#xff08;PCM&#xff09; (2)、播放G.711 a-law文件: …

英语10大词性

英文缩写v 代表动词 对应的英单词是verb 音标 英[vɜːb] 美[vɜːrb] 英文缩写n 代表名词 对应的英文单词是noun 音标 英[naʊn] 美[naʊn] 英文缩写prep 代表介词 对应的英文单词是preposition 音标 英[ˌprepəˈzɪʃn…