현재 내 암호 해독 방법이 작동하지 않는 이유를 파악하려고합니다. DES, CBC 및 PKCS7Padding을 사용하여 문자열을 암호화했습니다. 내 현재 code은 암호 해독 중에 panic: crypto/cipher: input not full blocks
을 출력합니다.Golang : DES, CBC 및 PKCS7을 사용하여 어떻게 해독합니까?
0
A
답변
2
버디 완전히 잘 작동합니다.
package main
import (
"bytes"
"crypto/des"
"crypto/cipher"
"fmt"
)
func DesEncryption(key, iv, plainText []byte) ([]byte, error) {
block, err := des.NewCipher(key)
if err != nil {
return nil, err
}
blockSize := block.BlockSize()
origData := PKCS5Padding(plainText, blockSize)
blockMode := cipher.NewCBCEncrypter(block, iv)
cryted := make([]byte, len(origData))
blockMode.CryptBlocks(cryted, origData)
return cryted, nil
}
func DesDecryption(key, iv, cipherText []byte) ([]byte, error) {
block, err := des.NewCipher(key)
if err != nil {
return nil, err
}
blockMode := cipher.NewCBCDecrypter(block, iv)
origData := make([]byte, len(cipherText))
blockMode.CryptBlocks(origData, cipherText)
origData = PKCS5UnPadding(origData)
return origData, nil
}
func PKCS5Padding(src []byte, blockSize int) []byte {
padding := blockSize - len(src)%blockSize
padtext := bytes.Repeat([]byte{byte(padding)}, padding)
return append(src, padtext...)
}
func PKCS5UnPadding(src []byte) []byte {
length := len(src)
unpadding := int(src[length-1])
return src[:(length - unpadding)]
}
func main() {
originalText := "sysys"
fmt.Println(originalText)
mytext := []byte(originalText)
key := []byte{0xBC, 0xBC, 0xBC, 0xBC, 0xBC, 0xBC, 0xBC, 0xBC }
iv := []byte{0xBC, 0xBC, 0xBC, 0xBC, 0xBC, 0xBC, 0xBC, 0xBC }
cryptoText,_ := DesEncryption(key, iv, mytext)
fmt.Println(string(cryptoText))
decryptedText,_ := DesDecryption(key, iv, cryptoText)
fmt.Println(string(decryptedText))
}
+0
예! 감사! 나는 메인에서 한 줄을 바꿨다. 'fmt.Println (string (cryptoText))'를'fmt.Println (base64.URLEncoding.EncodeToString (cryptoText))'으로 변경했습니다. –
+0
이 패딩/패딩 코드를 사용하는 것이 더 좋습니다 : https://github.com/go-web/tokenizer/blob/master/pkcs7.go –
1. DES는 사용하지 마십시오. 안전하지 않으며 AES로 대체되었습니다. 사용하기가 더 어렵지 않습니다. 2. 암호 해독에 사용할 암호화 된 데이터에 IV를 앞에 붙이면 무작위 IV를 사용합니다 (IV는 비밀 일 필요가 없습니다). 동일한 암호화 키가 여러 메시지에 사용되는 경우 다른 IV를 사용하는 것이 중요합니다. 3. 암호화의 요점은 일반적으로 보안을 생성하는 것입니다, 부적절하게 사용되는 암호화는 보안을 제공하지 않습니다. – zaph
12 문자로 암호화 된 문자열의 암호를 해독하고 고유 키와 고유 한 IV를 지정하려는 것은 분명하지 않습니다. 암호화에 사용 된 것과 동일한 키와 IV가 암호 해독에 사용되어야합니다. 이 질문은보다 명확하게 이루어질 수 있으며 성취하고자하는 목표에 대해 더 많은 정보를 제공 할 수 있습니다. – zaph
우선 해독 할 때 base64를 디코딩하지 않으므로 데이터 크기가 잘못되었습니다. – JimB