3

元のLARGEデータを暗号化し、このデータのMIDDLEチャンクのみを復号化できる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:])
4

1 に答える 1

2

メッセージがブロックに分割され、1つのブロックの出力が次のブロックの暗号化に使用されるCBC(暗号文ブロックチェーン)モードを使用していますこれは基本的にシーケンシャル操作です。復号化するには、暗号文を順番に処理する必要もあります。

CTR(カウンター)モードを使用すると、ランダムアクセスが可能になります。

于 2011-11-24T19:56:37.187 に答える