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


是你多么温馨的目光

教我坚毅望着前路

叮嘱我跌倒不应放弃

没法解释怎可报尽亲恩

爱意宽大是无限

请准我说声真的爱你

🎵 Beyond《真的爱你》


引言

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

什么是TripleDES?

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

准备工作

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

代码实现

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

go 复制代码
package main

import (
	"bytes"
	"crypto/cipher"
	"crypto/des"
	"encoding/hex"
	"fmt"
	"log"
)

// PKCS5Padding 对明文进行PKCS5填充
func PKCS5Padding(src []byte, blockSize int) []byte {
	padding := blockSize - len(src)%blockSize
	padText := 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。

在终端中运行以下命令:

sh 复制代码
go run main.go

结论

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

相关推荐
红尘散仙5 小时前
我把终端小说阅读器接上了 AI Agent:TRNovel 现在能用 skill 生成书源了
人工智能·后端·rust
卷毛的技术笔记6 小时前
告别硬编码!Spring AI Alibaba 实现 AI Agent 智能工具调用(Tool Calling)
java·人工智能·后端·python·spring·ai编程
isyangli_blog6 小时前
OpenDayLight (Carbon 版本) 启动与组件安装
开发语言·php
vb2008116 小时前
FastAPI APIRouter
开发语言·python
Benszen7 小时前
KVM虚拟化解决方案
开发语言·perl
会编程的土豆7 小时前
Go 语言反射(Reflection)详解
开发语言·后端·golang
東雪木7 小时前
多线程与并发编程 专属复习笔记
java·开发语言·笔记·java面试
喵个咪7 小时前
GoWind Toolkit Go后端代码生成 完整全流程实战
后端·go·orm
杨充7 小时前
1.3 浮点型数据设计灵魂
开发语言·python·算法
噜噜噜阿鲁~7 小时前
python学习笔记 | 11.3、面向对象高级编程-多重继承
java·开发语言