PyCrypto を使用して、CBC モード (Python 3.2.3 64 ビットおよび PyCrypto 2.6) で AES を使用してバイナリ ファイルを暗号化しています。次のコードを使用: http://eli.thegreenplace.net/2010/06/25/aes-encryption-of-files-in-python-with-pycrypto/
しかし、次のエラーが発生します: ValueError: IV は 16 バイト長でなければなりません。
コードは次のとおりです。
def encryptFile(key, in_filename, out_filename=None, chunksize=64*1024):
""" Encrypts a file using AES (CBC mode) with the
given key.
key:
The encryption key - a string that must be
either 16, 24 or 32 bytes long. Longer keys
are more secure.
in_file:
Input file
out_file:
If None, a StringIO will be returned.
chunksize:
Sets the size of the chunk which the function
uses to read and encrypt the file. Larger chunk
sizes can be faster for some files and machines.
chunksize must be divisible by 16.
"""
if not out_filename:
out_filename = in_filename + '.enc'
iv = ''.join(chr(random.randint(0, 0xFF)) for i in range(16))
encryptor = AES.new(key, AES.MODE_CBC, iv)
filesize = os.path.getsize(in_filename)
with open(in_filename, 'rb') as infile:
with open(out_filename, 'wb') as outfile:
outfile.write(struct.pack('<Q', filesize))
outfile.write(iv)
while True:
chunk = infile.read(chunksize)
if len(chunk) == 0:
break
elif len(chunk) % 16 != 0:
chunk += ' ' * (16 - len(chunk) % 16)
outfile.write(encryptor.encrypt(chunk))
検索して実験してみましたが、うまくいかないようです。Python は私にとってかなり新しいものであり、暗号化も同様です。どんな助けでも大歓迎です。前もって感謝します。