1

Pythonを使用してバイナリファイルを暗号化および復号化する方法に興味があります。pycrypto ライブラリを調べたところ、一部のブロック暗号では、ファイルの長さを 8/16/etc の倍数にする必要があるようです。任意の長さのファイルを処理するときにこれを処理する方法がわかりません (おそらく位置合わせがずれている可能性があります)。私はGPGへの砲撃を検討しましたが、Pythonでこれを行うことができれば素晴らしいでしょう.

前もって感謝します。

4

2 に答える 2

1

その名前が示すように、すべてのブロック暗号 (どのライブラリのブロック暗号も) は、特定のサイズのデータ​​ ブロックに対して機能します。最も有名なものである TDES と AES は、それぞれ 8 バイトと 16 バイトで動作します。

それ以外の長さで作業するには、操作モードも選択する必要があります。すべてのモードで、データがブロック サイズよりも長く (または短く) なる可能性があります。ただし、一部のデータはそれに合わせたままにしておく必要があります (CBC など)。他のもの (セグメント サイズ 1 の CTR など) については、まったく制約がありません。

これは、後者の場合に PyCrypto を使用する方法です ( API の説明から)。

from Crypto.Cipher import AES
from Crypto import Random

key = b'Sixteen byte key'
iv = Random.new().read(AES.block_size)
cipher = AES.new(key, AES.MODE_CFB, iv)
msg = iv + cipher.encrypt(b'Attack at dawn')

ご覧のとおり、メッセージの長さは 14 バイト (!= 16) で、任意のサイズを取ることができます。

于 2012-09-10T04:46:20.590 に答える
0

PythonAES を使用: https://github.com/caller9/pythonaes

これは、ファイルを暗号化/復号化する方法を示すデモです。私はそれがどのファイルサイズでも動作すると仮定しています: https://github.com/caller9/pythonaes/blob/master/demo.py

于 2012-09-09T23:51:05.270 に答える