虽然使用3des进行解密,但给定的加密文本未完全解密,不确定错误出在哪里,请帮助我完成解密错误
有关Insection并运行,代码位于Go Playground上
package main
import (
"crypto/des"
"encoding/hex"
"fmt"
)
func main() {
// Mimimum Key Size of Length 24
key := "mysecretPasswordkeySiz24"
plainText := "https://8gwifi.org"
ct := EncryptTripleDES([]byte(key),plainText)
fmt.Printf("Original Text: %s\n",plainText)
fmt.Printf("3DES Encrypted Text: %s\n", ct)
DecryptTripleDES([]byte(key),ct)
}
func EncryptTripleDES(key []byte, plaintext string) string {
c,err := des.NewTripleDESCipher(key)
if err != nil {
fmt.Errorf("NewTripleDESCipher(%d bytes) = %s", len(key), err)
panic(err)
}
out := make([]byte, len(plaintext))
c.Encrypt(out, []byte(plaintext))
return hex.EncodeToString(out)
}
func DecryptTripleDES(key []byte, ct string) {
ciphertext, _ := hex.DecodeString(ct)
c, err := des.NewTripleDESCipher([]byte(key))
if err != nil {
fmt.Errorf("NewTripleDESCipher(%d bytes) = %s", len(key), err)
panic(err)
}
plain := make([]byte, len(ciphertext))
c.Decrypt(plain, ciphertext)
s := string(plain[:])
fmt.Printf("3DES Decrypyed Text: %s\n", s)
}
输出
Original Text: https://8gwifi.org
3DES Encrypted Text: a6e5215154bf86d000000000000000000000
3DES Decrypyed Text: https://
答案 0 :(得分:2)
给定的加密文本未完全解密
您提供的加密文本已完全解密。问题不是(尚未)解密,而是您的加密。如文档所述,des.NewTripleDESCipher
返回一个cipher.Block
,而cipher.Block.Encrypt
仅按文档所述加密输入数据的第一块。假定DES的块大小为8字节,则仅加密输入数据的前8个字节,即https://
。
这意味着要加密所有数据,必须加密所有块。与此类似,解密时您需要解密所有块-但是cipher.Block.Decrypt
也只解密一个块。
除DES损坏外,请勿将其用于严重的事情。