pycrypto AESまたは他のアルゴリズムを使用して、データの中央のチャンクを復号化する

私はpycryptoパッケージの暗号化アルゴリズムを使用して元の大きなデータを暗号化し、このデータの中規模のチャンクのみを復号化する方法を探していました。つまり、オフセット0で復号化を開始するのではなく、特定のオフセットでデータの復号化を開始します。

私は以下のようにAESを試しました。しかし、データの中央のチャンクを(もちろん適切なキーで)復号化するのではなく、暗号化されたデータの中から私が実際に解読する必要のある部分に移動するだけで、データを適切に解読できます。この中間チャンクの前の部分。これは、時間と処理能力を節約する上で重要です。元のデータが4GBであるとします。ある時点では、オフセットが3GB〜3.5GBのデータのみが必要です。あなたが必要とする1GBチャンクに達するために2GBのデータ全体を解読することは、時間とリソースの無駄です...

これはすべての暗号化/復号アルゴリズムの性質ですか?おそらくあなたは私が欲しいものを何かお勧めすることができますか?それは鍵で動作し、かなり安全です。

    from Crypto.Cipher import AES

key = '0123456789abcdef' #16 chars
mode = AES.MODE_CBC

e = AES.new(key, mode)

orig = 'hellohowareyousuhellohowareyousu' #32 chars
print len(orig)

a = e.encrypt(orig)
print len(a)

d = AES.new(key, mode)

#works
print d.decrypt(a[:16]) #aes requires encrypt/decrypt 16 chars at a time
print d.decrypt(a[16:])

#doesn't work
print d.decrypt(a[16:])
3

1 答え

CBC(暗号テキストブロックチェーニング)モードを使用しています。メッセージはブロックに分割され、1つのブロックの出力は次のブロックの暗号化に使用されます。これは基本的には順次操作です。解読するには、暗号文を順次処理する必要があります。

CTR(カウンタ)モードを使用すると、ランダムアクセスできます。

2
追加された
@ MistahX ECBモードは非常に安全ではありません。絶対に使用しないでください。ペンギンの画像を見てください: en.wikipedia.org/wiki/ECB_mode
追加された 著者 dlitz,
ECBモードも同様に機能し、電子コードブロック
追加された 著者 MistahX,