【Go】爬虫数据解密_使用Go语言实现TripleDES加密和解密


是你多么温馨的目光
教我坚毅望着前路
叮嘱我跌倒不应放弃
没法解释怎可报尽亲恩
爱意宽大是无限
请准我说声真的爱你
                     🎵 Beyond《真的爱你》


引言

Triple Data Encryption Standard (TripleDES 或 3DES) 是一种对称加密算法,它通过三次应用Data Encryption Standard (DES) 加密算法来提供更高的安全性。本文将介绍如何使用Go语言实现TripleDES加密和解密,包括PKCS5填充和去填充。

什么是TripleDES?

TripleDES是对称密钥加密的一个扩展版,它通过三次应用DES算法来提高安全性。使用三个不同的密钥,3DES在数据块上进行三次加密和解密操作,从而显著提高了安全性。

准备工作

在开始编写代码之前,请确保已安装Go语言环境。可以从 Go语言官方网站 下载并安装。

代码实现

以下是完整的代码实现,包括加密和解密函数,以及PKCS5填充和去填充。

package mainimport ("bytes""crypto/cipher""crypto/des""encoding/hex""fmt""log"
)// PKCS5Padding 对明文进行PKCS5填充
func PKCS5Padding(src []byte, blockSize int) []byte {padding := blockSize - len(src)%blockSizepadText := bytes.Repeat([]byte{byte(padding)}, padding)return append(src, padText...)
}// PKCS5UnPadding 对解密后的明文去除PKCS5填充
func PKCS5UnPadding(origData []byte) []byte {length := len(origData)unpadding := int(origData[length-1])return origData[:(length - unpadding)]
}// Encrypt3DES 3DES加密
func Encrypt3DES(src, key []byte, ivs string) ([]byte, error) {block, err := des.NewTripleDESCipher(key)if err != nil {return nil, err}src = PKCS5Padding(src, block.BlockSize())iv := []byte(ivs)if len(iv) != block.BlockSize() {return nil, fmt.Errorf("IV length must be equal to block size")}blockMode := cipher.NewCBCEncrypter(block, iv)cipherText := make([]byte, len(src))blockMode.CryptBlocks(cipherText, src)return cipherText, nil
}// Decrypt3DES 3DES解密
func Decrypt3DES(src, key []byte, ivs string) ([]byte, error) {block, err := des.NewTripleDESCipher(key)if err != nil {return nil, err}iv := []byte(ivs)if len(iv) != block.BlockSize() {return nil, fmt.Errorf("IV length must be equal to block size")}blockMode := cipher.NewCBCDecrypter(block, iv)blockMode.CryptBlocks(src, src)newText := PKCS5UnPadding(src)return newText, nil
}func main() {key := []byte("0123456789abcdef01234567") // 24字节的密钥iv := "12345678"                          // 8字节的初始向量plaintext := "Hello, 3DES CBC Encryption!"// 加密ciphertext, err := Encrypt3DES([]byte(plaintext), key, iv)if err != nil {log.Fatalf("加密失败: %v", err)}fmt.Printf("加密后的密文: %s\n", hex.EncodeToString(ciphertext))// 解密decryptedText, err := Decrypt3DES(ciphertext, key, iv)if err != nil {log.Fatalf("解密失败: %v", err)}fmt.Printf("解密后的明文: %s\n", decryptedText)
}

代码说明

PKCS5填充和去填充

PKCS5Padding:将数据填充到块大小的倍数。
PKCS5UnPadding:去除填充的数据。

3DES加密

Encrypt3DES:使用3DES加密算法对数据进行加密。包括PKCS5填充,创建3DES密码块,设置CBC模式加密器,并进行加密。

3DES解密

Decrypt3DES:使用3DES解密算法对数据进行解密。包括创建3DES密码块,设置CBC模式解密器,并进行解密,然后去除PKCS5填充。
主函数:

main函数定义了密钥和初始向量(IV),以及要加密的明文。然后调用加密函数和解密函数,并打印结果。

如何运行

将上述代码保存为一个文件,例如main.go。
在终端中运行以下命令:

go run main.go

结论

本文介绍了如何使用Go语言实现TripleDES加密和解密。我们讨论了TripleDES的基本概念,并提供了完整的代码示例。

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

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

相关文章

C#面:请解释C#接口的显式实现有什么意义

C#接口的显式实现是指在实现接口成员时,使用接口名称进行限定的方式。这种方式可以在一个类中实现多个接口,并且可以避免接口成员之间的命名冲突。显式实现接口的成员只能通过接口类型来访问,而不能通过类的实例来访问。 显式实现接口的主要…

c语言回顾-函数递归

1.递归的介绍 1.1什么是递归 递归是指在一个函数的定义中调用自身的过程。简单来说,递归是一种通过重复调用自身来解决问题的方法。 递归包括两个关键要素:基本情况和递归情况。基本情况是指当问题达到某个特定条件时,不再需要递归调用&am…

Postman简介

目录 1.概述 2.诞生背景 3.历史版本 4.安装和卸载 5.菜单和菜单项 6.使用 7.应用场景 8.示例 8.1.简单的GET请求 8.2.POST请求提交数据 8.3.查询参数 9.未来展望 10.总结 1.概述 Postman是一款用于API开发、测试和文档管理的综合性工具。允许开发者和测试人员创建…

electron+js 通过图片地址复制图片

方法1:通过 FileReader 获取图片Buffer >创建 nativeImage 对象 function copyImageToClipboard(imageUrl) {let xhr new XMLHttpRequest();xhr.open(get, imageUrl, true);xhr.responseType blob;xhr.onload function () {if (this.status 200) {let reader…

Python语言例题集(015)

#!/usr/bin/python3 #使用列表模仿队列的操作。 class Queue(): def init(self): self.queue[] def enqueue(self,data):self.queue.insert(0,data)def dequeue(self):if len(self.queue):return self.queue.pop()return "队列是空的"qQueue() q.enqueue(‘Grape’…

【深度学习】数竹签演示软件系统

往期文章列表: 【YOLO深度学习系列】图像分类、物体检测、实例分割、物体追踪、姿态估计、定向边框检测演示系统【含源码】 【深度学习】物体检测/实例分割/物体追踪/姿态估计/定向边框/图像分类检测演示系统【含源码】 【深度学习】YOLOV8数据标注及模型训练方法整…

使用Redis将单机登录改为分布式登录

使用Redis将单机登录改为分布式登录 1. 背景 ​ 现在大多数的应用程序登录的方式都是必须满足分布式登录的效果,比如我们在一个客户端登录之后可以在另一个客户端上面共享当前用户的信息,这样在另一个客户端登录的时候就不用用户再次输入自己的账号密码…

Java 面向对象 -- Java 语言的封装、继承、多态、内部类和 Object 类

大家好,我是栗筝i,这篇文章是我的 “栗筝i 的 Java 技术栈” 专栏的第 007 篇文章,在 “栗筝i 的 Java 技术栈” 这个专栏中我会持续为大家更新 Java 技术相关全套技术栈内容。专栏的主要目标是已经有一定 Java 开发经验,并希望进…

R语言数据分析案例27-使用随机森林模型对家庭资产的回归预测分析

一、研究背景及其意义 家庭资产分析在现代经济学中的重要性不仅限于单个家庭的财务健康状况,它还与整个经济体的发展紧密相关。家庭资产的增长通常反映了国家经济的整体增长,而资产分布的不均则暴露了经济不平等的问题。因此,全球视角下的家…

Centos7.9使用kubeadm部署K8S单机环境

Centos7.9使用kubeadm部署K8S单机环境 使用kubeadm部署一个k8s单机环境 1. 环境信息 操作系统:CentOS 7.9.2009内存: 4GBCPU: 2网络: 能够互访,能够访问互联网 hostnameip备注k8s192.168.0.159master worker 2. 准备工作 在所有节点(包…

实时交通 | 城市交通态势采集及可视化操作(定时运行)

一、前言 交通态势数据是关于交通状况的一种量化描述,它提供了关于道路网络运行状态的详细信息。交通态势数据指的是根据车流入量和车流出量的定义,衡量整个全局交通区域交通态势的数据。这些数据通常从车辆GPS轨迹数据中提取,包括车辆行驶速…

Folx软件下载及安装教程

简介: Folx Pro是一款适合Mac的专业下载工具也是一款BT下载器,Folx中文版有一个支持Retina显示的现代界面,提供独特的系统排序、存储下载内容与预览下载文件。Folx中文官网提供Folx教程、激活码、下载。 安 装 包 获 取 地 址: …

tcp协议机制的总结(可靠性,提高性能),基于tcp的应用层协议,用udp如何实现可靠传输

目录 总结 引入 可靠性 ​编辑 分析 三次握手 提高性能 其他 常见的基于tcp应用层协议 用udp实现可靠传输 总结 引入 为什么tcp要比udp复杂的多? 因为它既要保证可靠性,又要兼顾性能 可靠性 分析 其中,序列号不止用来排序,还可以用在重传时去重 确认应答是机制中的…

34 Debian如何配置ELK群集

作者:网络傅老师 特别提示:未经作者允许,不得转载任何内容。违者必究! Debian如何配置ELK群集 《傅老师Debian知识库系列之34》——原创 ==前言== 傅老师Debian知识库特点: 1、拆解Debian实用技能; 2、所有操作在VMware虚拟机实测完成; 3、致力于最终形成Debian知识手…

开放式耳机值得入手买吗?可以对比这几款开放式耳机看看

居家办公时,选择一款合适的耳机能够有效地提高工作效率。入耳式耳机虽然能够有效地隔绝外界噪音,但长时间佩戴会对耳朵造成负担,甚至引发耳道感染。而头戴式耳机虽然能够提供更好的音质,但体积较大,佩戴起来不够灵活。…

仿FC数学金刚游戏介绍

简介 Math Monkey是Simple2l工作室开发的第二款小游戏,灵感来源于FC游戏平台的数学金刚游戏。小学时玩FC游戏是业余时间最期待的事情,还记得有一次和玩伴玩游戏时已经晚上了,于是约定再玩一把就各回各家,没想到又连玩了N把每一把…

大模型日报|今日必读的 8 篇大模型论文

大家好,今日必读的大模型论文来啦! 1.Google DeepMind 新研究:当 Transformer 遇见神经算法推理器 Transformer 以其简单而有效的架构彻底改变了机器学习。在互联网的海量文本数据集上预先训练 Transformer,为自然语言理解&…

天气Api接口

接口请求格式如下: http://cdn.weather.hao.360.cn/sed_api_weather_info.php?app360chrome&code【地区编码】&_jsonp【jsonp回调函数】其中的 地区编码 与中国天气网的地区编码是一样的。如果不设置这个参数,则默认显示本地的天气状况。 简易…

Java--多维数组

1.多维数组可以看成是数组的数组,比如二维数组就是一个特殊的一维数组,其每一个元素都是一个一维数组 2.二维数组 下列数组啊可看成一个两行五列的数组 int a[][] new int[2][5]; 3.输出二维数组的第一个数组中具体元素,通过调用打…