【Go】爬虫数据解密_使用Go语言实现TripleDES加密和解密
warning:
这篇文章距离上次修改已过191天,其中的内容可能已经有所变动。
package main
import (
"crypto/des"
"crypto/md5"
"crypto/rand"
"encoding/hex"
"fmt"
"io"
)
// 使用TripleDES进行加密
func EncryptTripleDES(key []byte, text []byte) ([]byte, error) {
block, err := des.NewTripleDESCipher(key)
if err != nil {
return nil, err
}
plaintext := pad(text)
iv := key[:des.BlockSize]
encrypter := des.NewCipher(block)
encrypted := make([]byte, len(plaintext))
encrypter.Encrypt(encrypted, plaintext)
return encrypted, nil
}
// 使用TripleDES进行解密
func DecryptTripleDES(key []byte, text []byte) ([]byte, error) {
block, err := des.NewTripleDESCipher(key)
if err != nil {
return nil, err
}
iv := key[:des.BlockSize]
decrypter := des.NewCipher(block)
decrypted := make([]byte, len(text))
decrypter.Decrypt(decrypted, text)
return unpad(decrypted), nil
}
// 使用MD5生成密钥
func GenerateKey(password string) []byte {
hasher := md5.New()
hasher.Write([]byte(password))
return hasher.Sum(nil)
}
// 填充数据至8的倍数
func pad(buf []byte) []byte {
padNum := des.BlockSize - (len(buf) % des.BlockSize)
padText := bytesRepeat([]byte{byte(padNum)}, padNum)
return append(buf, padText...)
}
// 移除填充数据
func unpad(buf []byte) []byte {
length := len(buf)
if length == 0 {
return buf
}
n := int(buf[length-1])
return buf[:length-n]
}
// 创建一个重复的字节切片
func bytesRepeat(b []byte, n int) []byte {
bb := make([]byte, len(b)*n)
for i := 0; i < n; i++ {
copy(bb[i*len(b):(i+1)*len(b)], b)
}
return bb
}
func main() {
// 示例密码
password := "secret"
// 原始数据
originalData := []byte("Hello, TripleDES!")
// 生成密钥
key := GenerateKey(password)
// 加密数据
encryptedData, err := EncryptTripleDES(key, originalData)
if err != nil {
panic(err)
}
fmt.Printf("Encrypted: %x\n", encryptedData)
// 解密数据
decryptedData, err := DecryptTripleDES(key, encryptedData)
if err != nil {
panic(err)
}
fmt.Printf("Decrypted: %s\n", decryptedData)
}
这段代码提供了使用Go语言进行TripleDES加密和解密的一个简单示例。首先,使用MD5生成密钥。然后,使用EncryptTripleDES
函数进行加密,使用DecryptTripleDES
函数进行解密。代码中包含了填充和移除填充的必要操作,以确保数据块的大小符合加密算法的要求。
评论已关闭