私はransom wareのコードを読んでいました。コードに従って、著者はファイルを暗号化するために64kbのチャンクに分割しました。なぜ私は理解できません。暗号化のためにファイルをチャンクに分割する必要がありますか
1
A
答えて
0
攻撃コードライターがなぜ不明で、選択肢だったのですか?
AESなどの現在の暗号化方法を使用してファイルサイズを64KBに制限する必要はありません。ほとんどの実装では、AESのサイズを2^68バイトに制限することが賢明ですが、任意のサイズのファイルを処理します。
1
コードを見ると、encryptorは1024 * blocksizeバイト(実際には16KB)を単一のチャンクとして読み取り、同じ暗号オブジェクトを使用して各チャンクを個別に暗号化します。
大きなファイルを暗号化できるようにするには、このファイルを暗号化してから書き戻すには大きすぎるファイルがあるため、これを実行する必要があります。つまり、空きメモリは、暗号化する必要があるファイルのサイズの3倍以上でなければなりません。
PyCryptoはストリームベースの暗号実装をしていないため、メモリの占有スペースを小さくして同じタスクを実行するのに最も近い方法です。
一般に、各チャンクの暗号化は、書き込まれたのと同じチャンク形式で読み返す必要がある独立した暗号文チャンクを生成しますが、ここでは必要ありません。 AES-CBCは、現在の平文ブロックを前の暗号文ブロックとXORします。それが最初のブロックであれば、IVは前の暗号文ブロックとして使用されます。 IVは暗号オブジェクト上でリセットされないので、常に前の暗号文ブロックを保持する。その結果、生成された暗号文は実際には単一の大きなチャンクとしての暗号化と同等です。参考のため
、私はこのことについて話している:彼はおそらく**ブロック暗号を使用しているので
def encrypt(in_file, out_file, password, key_length=32):
bs = AES.block_size
salt = Random.new().read(bs - len('Salted__'))
key, iv = derive_key_and_iv(password, salt, key_length, bs)
cipher = AES.new(key, AES.MODE_CBC, iv)
out_file.write('Salted__' + salt)
finished = False
while not finished:
chunk = in_file.read(1024 * bs)
if len(chunk) == 0 or len(chunk) % bs != 0:
padding_length = (bs - len(chunk) % bs) or bs
chunk += padding_length * chr(padding_length)
finished = True
out_file.write(cipher.encrypt(chunk))
関連する問題
- 1. S3暗号化ファイルを復号化する必要はありますか?
- 2. APNSトークンを暗号化する必要がありますか?
- 3. node.js:暗号化する必要があるデータを暗号化しますか?
- 4. androidのDBファイルを暗号化する必要があります
- 5. 4桁の暗号化された暗証番号をキーストアに保存する必要があります
- 6. Azureサービスパッケージを暗号化するために暗号化がどの程度信頼性がありますか?
- 7. SQLiteのセキュリティオプションは、データベースを暗号化する必要がありますか?
- 8. アンドロイド開発のsharedpreferenceを暗号化する必要がありますか?
- 9. 私の非同期コールをCPUの数に応じてチャンクに分割する必要がありますか?
- 10. openid claim_idを暗号化して保存する必要がありますか?
- 11. テーブルを縦に分割する必要がありますか?
- 12. userIdInt、commentidなどはウェブサイトで暗号化する必要がありますか?
- 13. DESなどの暗号化アルゴリズムをビットまたはバイトに適用する必要がありますか?
- 14. PHPで暗号化されたOpensslをRubyで復号化する必要があります
- 15. Twofish暗号化/復号化のためのActionScriptライブラリがあります
- 16. クライアントに送信する前に、テーブルのID列を暗号化/ハッシュ化する必要があります。
- 17. コアデータデータベースを暗号化または部分的に暗号化しますか?
- 18. OAuth:HTTPSでHMAC-SHA1を暗号化する必要があります
- 19. WCF「プライマリシグネチャを暗号化する必要があります。 FaultContract with ProtectionLevel.None
- 20. あなたの想像力が必要です:ファイルを暗号化して、ビットコインの量が復号化に必要なようにする方法
- 21. 2つの列に分割する必要があります
- 22. チャンク内のデータを暗号化/復号化する方法は?
- 23. OpenId Claimer Identifierをデータベースに保存する前に暗号化する必要がありますか?
- 24. ファイルをJavascriptでチャンクに分割する
- 25. OAuth2.0暗号化の前に、リフレッシュトークンのコンテンツ形式はどのようにする必要がありますか?
- 26. Web設定ファイルの一部のセクションを暗号化する必要があります
- 27. aspnet_Profileテーブルに格納されたデータを暗号化する必要があります
- 28. Javascriptまたはバックエンドでログインパスワードを暗号化する必要がありますか?
- 29. CodeIgniterでセッション変数の暗号化を手動で有効にする必要がありますか?
- 30. はRSA暗号化のヘルプが必要
。 – sascha
@sascha AESのブロックサイズが128ビットであるのはなぜですか? – zaph
おそらく、その実装で必要とされるように、メモリフットプリントとファイル全体をメモリにロードすることを制限することができます。あなたのリンクされたコードのトップラインは、stackoverflow上のここにその起源へのリンクです、なぜ@コメントを著者に追加し、説明を求めてください。 –