2

私はこのブログの3DES暗号化(ヘッダーアプリケーションの下)をPythonでCryptoを使用して使用しています。また、この質問の例として、AnAccountantと彼のFrog.txt多くの中でテストしています。その他のファイル(ファイルサイズは大きく異なります。たとえば、TOASTERS)。

pyencrypt

import os
from Crypto.Cipher import DES3

def encrypt_file(in_filename, out_filename, chunk_size, key, iv):
    des3 = DES3.new(key, DES3.MODE_CFB, iv)
    with open(in_filename, 'r') as in_file:
        with open(out_filename, 'w') as out_file:
            while True:
                chunk = in_file.read(chunk_size)
                if len(chunk) == 0:
                    break
                elif len(chunk) % 16 != 0:
                    chunk += ' ' * (16 - len(chunk) % 16)
                out_file.write(des3.encrypt(chunk))

def decrypt_file(in_filename, out_filename, chunk_size, key, iv):
    des3 = DES3.new(key, DES3.MODE_CFB, iv)

    with open(in_filename, 'r') as in_file:
        with open(out_filename, 'w') as out_file:
            while True:
                chunk = in_file.read(chunk_size)
                if len(chunk) == 0:
                    break
                out_file.write(des3.decrypt(chunk))

使用法

import pyencrypt, md5
from Crypto import Random
iv = Random.get_random_bytes(8)
m = md5.new()
m.update("encryptionkey")
key =  m.digest()
.encrypt_file("C:\\treeoffunfiles\\Accountant and his frog.txt", 'C:\\treeoffun\\to_enc.enc', 8192, key, iv)
pyencrypt.decrypt_file('C:\\treeoffunfiles\\to_enc.enc', 'C:\\treeoffunfiles\\to_enc.dec', 8192, key, iv)

そして、ファイルの暗号化は素晴らしいです(そこに不満はありません)!しかし、ファイルの復号化はそれほど優れていません。これは、元のファイルとnotepad++からの復号化されたファイルの比較出力です。

notepad ++
(出典:iforce.co.nz

復号化されたファイルに元のファイルのコンテンツが欠落している理由について何か考えはありますか?また、(サイズが異なる可能性のあるファイル全体で)復号化(および必要に応じて暗号化)をより正確にするにはどうすればよいですか?

4

1 に答える 1

1

提案された回答はDSMによるコメントに投稿されました(私は彼が回答を投稿するのを待っていました、これは当面の間とどまることができます)。

これは私にとってはうまくいきますが、それでは私はWindowsを使用していません。代わりに、ファイルをバイナリモード( "rb" / "wb")で開いて、それが役立つかどうかを確認できますか?– DSM

問題は、3DES暗号化の元の実装がunixマシン上で実行されていたことでした。一方、システムでの結果はwindows異なります。

欠落しているデータを修正するためにchunks、DSMは、ファイルの入力/出力を通常の読み取り/書き込みではなくバイナリに変更することを提案しました。これにより、ここに示すように目的の出力が得られます

fyi diffnowは、1か月間の結果のみを保存します。

于 2013-02-07T03:18:05.250 に答える