現在、私の解読方法がなぜ機能していないのか理解しようとしています。 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
うん!ありがとう!私はメインの1行を変更しました。私は 'fmt.Println(string(cryptoText))'を 'fmt.Println(base64.URLEncoding.EncodeToString(cryptoText))'に変更しました。 –
+0
このパディング/アンディッドコードを使用する方が良いです:https://github.com/go-web/tokenizer/blob/master/pkcs7.go –
関連する問題
- 1. Botan AES CBC PKCS7暗号化と復号化
- 2. Golang:DESとCBCで5文字のプレーンテキストを暗号化するにはどうすればよいですか?
- 3. 暗号化および復号化クラス?
- 4. 暗号化および復号化パスワードのWebSphereのWebSphereで
- 5. Vigenere復号化および剰余
- 6. JavaのAES CBC復号化
- 7. 暗号化C#復号化AES CBC 256
- 8. のC#、Dapperの、POCOおよび暗号化/復号化は
- 9. SAMLアサーションを暗号化および復号化する方法
- 10. Azureストレージアクセスキーを暗号化および復号化する方法
- 11. Java Classオブジェクト暗号化/復号化およびオブジェクトデータベース
- 12. TripleDes、PKCS7、ECBを使用したPHPの暗号化/復号化
- 13. MediaCodecを使用して暗号化されたデータをSurfaceTextureに復号化および復号化する
- 14. C++およびDelphiの一部の文字列を暗号化および復号化する
- 15. 非対称鍵暗号化アルゴリズムは、一方向の復号化および暗号化機能をどのように維持しますか?
- 16. HMACをどのように復号化できますか?
- 17. 復号化暗号文キー、プレーンテキスト、およびアルゴリズム
- 18. bashでバックアップファイルを暗号化および復号化する簡単な方法
- 19. Javaでサウンドファイルを暗号化および復号化する方法は?
- 20. Qt/C++でファイルを暗号化および復号化する方法は?
- 21. レールでIDを暗号化および復号化する方法は?
- 22. stringをbase64に暗号化および復号化する方法は?
- 23. DES/CBC/ZeroBytePaddingデータの復号化
- 24. AesCryptoServiceProviderはCBCモードで並列復号化できますか?
- 25. pailler暗号システムは、負の大きな整数を暗号化および復号化できますか?
- 26. aes-256-cbc暗号化/復号化キーが機能しない
- 27. Crypto ++で生RSAアルゴリズムを使用してメッセージを暗号化および復号化しますか?
- 28. push/pull中にgitでファイルを暗号化および復号化することはできますか?
- 29. PHPでAES CBC + CTS(暗号文の盗用)モードを使用してデータを暗号化/復号化するにはどうすればよいですか?
- 30. AES-256-CBC悪い復号化は
1. DESを使用しないでください。安全ではなく、AESによって置き換えられました。使用するのが難しくありません。 2.無作為なIVを使用して、暗号化されたデータにIVを接頭辞として付加して復号化に使用します(IVは秘密にする必要はありません)。複数のメッセージに同じ暗号化キーを使用する場合は、別のIVを使用することが重要です。 3.暗号化のポイントが一般的にセキュリティを作成することを検討し、不適切に使用される暗号化は安全を提供しません。 – zaph
12文字の暗号化された文字列を復号化し、一意のキーと一意のIVを指定することは明確ではありません。解読には、暗号化に使用されたものと同じキーとIVを使用する必要があります。問題はより明確になり、あなたが達成しようとしていることに関する正確な情報を提供することができます。 – zaph
デコード時にbase64をデコードしていないので、データサイズが間違っています。 – JimB