Python3 の Crypto.Cipher を使用して AES を CTR モードで使用したいと考えています。実際の問題は、2 進数の配列 (文字列形式の「0/1」) があり、AES-CTR を使用してそれらを暗号化/復号化したいことです。この記事を見た後、以下に追加するコードを開発しようとしました。
from Crypto.Cipher import AES
import os
import sys
secret = os.urandom(16)
crypto = AES.new(os.urandom(32), AES.MODE_CTR, counter=lambda: secret)
msg = "Hello World"
#string-->bytes
bytes_msg = str.encode(msg)
print(msg + " > 2bytes > " + str(bytes_msg))
#bytes-->encrypt
encrypted_bytes_msg = crypto.encrypt(bytes_msg)
print(" > encryption > " + str(encrypted_bytes_msg))
#encrypt-->decrypt
decrypted_bytes_msg = crypto.decrypt(encrypted_bytes_msg)
print(" > decryption > " + str(decrypted_bytes_msg))
#bytes-->string
#decrypted_msg = decrypted_bytes_msg.decode() # <= !ERROR HERE!
#print(" > msg > " + decrypted_msg)
私は次のようなものを見ることを期待していました:
Hello World > 2bytes > " b'Hello World' > 暗号化 > #JibberishText# > 復号化 > b'Hello World' > Hello World
この実行の実際の結果は次のとおりです。
Hello World > 2bytes > b'Hello World' > 暗号化 > b'\x8eo\xfc`\xeck\xcf\r4\x1fS' > 復号化 > b'\xc7\x93\x8a\x1dK\xad\xc5\x9d8\x9c \x18'
また:最後の行をコメントアウトしないと、次のエラーが発生します。
ファイル「aes.py」、25 行目、decrypted_msg = decrypted_bytes_msg.decode() UnicodeDecodeError: 'utf-8' コーデックは位置 0 のバイト 0x8e をデコードできません: 無効な開始バイト