:ゴーから異なる結果移動中にファイルを復号化し、OpenSSLの
openssl aes-128-cbc -d -in file.encrypted -out file.decrypted -iv $IV -K $KEY
出力ファイル:
data, err := ioutil.ReadFile("file.encrypted")
if err != nil {
log.Fatal(err)
}
block, err := aes.NewCipher(key)
if err != nil {
log.Fatal(err)
}
mode := cipher.NewCBCDecrypter(block, iv)
mode.CryptBlocks(data, data)
err = ioutil.WriteFile("file.decrypted", data, 0644)
if err != nil {
log.Fatal(err)
}
私はOpenSSLを使用してファイルをも復号化されていますプログラムはOpenSSLの出力ファイルより8バイト大きいです。 OpenSSLので生成されたファイルから、hexdumpに対しての
テール:囲碁プログラムによって生成されたファイルから、hexdumpに対しての
ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff |................|
ff ff ff ff ff ff ff ff |........|
テール:
ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff |................|
ff ff ff ff ff ff ff ff 08 08 08 08 08 08 08 08 |................|
はなぜ08 08 08 08 08 08 08 08
は囲碁プログラムからの出力をファイルに追加されますか?
EDIT:BJブラックが説明するように、私の囲碁プログラムからの出力で余分なバイトの理由は、PKCSパディングが
です。
ファイルはCBCモードのAESで暗号化されているため、プレーンテキスト入力はブロックサイズの倍数になります。この要件を満たすためにパディングが追加されます。 AESのブロックサイズは16バイトなので、パディングバイトの合計数は常に1〜16バイトです。各パディングバイトは、私のケースでは0x08
のパディングバイトの総数に等しい値を持っています。
paddingBytes := int(data[len(data)-1])
WriteFile関数は、その後変更することができます。
ので、パディングの量を調べるために1だけでintに復号化されたファイルの最後のバイトを読み、その数を変換する必要があり、ファイルに追加
err = ioutil.WriteFile("file.decrypted", data[:len(data)-paddingBytes], 0644)
私のGoプログラムからの出力は、OpenSSLの出力と同じです。
John Smithさん、こんにちは、スタックオーバーフローへようこそ。寄付いただきありがとうございます。あなた自身の質問に対する回答がある場合、または質問に対する回答を拡大したい場合は、下記の回答セクションで回答してください。これにより、他のユーザーは、テキストを解析してどのテキストを見ているのかわからずに、質問と回答の間をより簡単にナビゲートできます。 –