|
|
- package crypter
-
- import (
- "encoding/base64"
- "errors"
-
- "crypto/des"
- "encoding/hex"
- )
-
- // ECB模式加密,返回16进制结果
- func TripleECBEncryptForHex(key, plaintext string) (string, error) {
-
- keyBytes, err := base64.StdEncoding.DecodeString(key)
-
- if err != nil {
- return "", err
- }
-
- data := []byte(plaintext)
- ciphertext, err := TripleECBEncrypt(keyBytes, data)
- if err != nil {
- return "", err
- }
- return hex.EncodeToString(ciphertext), nil
- }
-
- // ECB模式解密16进制密文
- func TripleECBDecryptFromHex(key, plaintext string) (string, error) {
-
- keyBytes, err := base64.StdEncoding.DecodeString(key)
-
- if err != nil {
- return "", err
- }
-
- data, err := hex.DecodeString(plaintext)
- if err != nil {
- return "", err
- }
-
- ciphertext, err := TripleECBDecrypt(keyBytes, data)
- if err != nil {
- return "", err
- }
- return string(ciphertext), nil
- }
-
- // ECB模式加密,返回byte
- func TripleECBEncrypt(key, plaintext []byte) ([]byte, error) {
-
- // 创建Triple DES的块加密器
- block, err := des.NewTripleDESCipher(key)
- if err != nil {
- return []byte(""), err
- }
-
- // 创建切片来存储加密后的密文
- ciphertext := make([]byte, len(plaintext))
-
- // 复制明文到切片中
- copy(ciphertext, plaintext)
-
- // 应用PKCS#7填充
- ciphertext = PKCS5Padding(ciphertext, block.BlockSize())
-
- // 使用ECB模式加密填充后的数据
- for i := 0; i < len(ciphertext); i += block.BlockSize() {
- block.Encrypt(ciphertext[i:i+block.BlockSize()], ciphertext[i:i+block.BlockSize()])
- }
-
- return ciphertext, nil
-
- }
-
- // ECB模式解密,返回byte
- func TripleECBDecrypt(key, ciphertext []byte) ([]byte, error) {
- // 创建Triple DES的块加密器(解密时也需要这个)
- block, err := des.NewTripleDESCipher(key)
- if err != nil {
- return []byte(""), err
- }
-
- // 检查密文长度是否是8字节的倍数
- if len(ciphertext)%des.BlockSize != 0 {
- return []byte(""), errors.New("ciphertext is not a multiple of the block size")
- }
-
- // 创建一个buffer来存储解密后的明文
- plaintext := make([]byte, len(ciphertext))
-
- // 使用ECB模式解密
- for i := 0; i < len(ciphertext); i += block.BlockSize() {
- block.Decrypt(plaintext[i:i+block.BlockSize()], ciphertext[i:i+block.BlockSize()])
- }
- plaintext = PKCS5UnPadding(plaintext)
-
- // 打印解密后的明文
-
- return plaintext, nil
- }
|