2016-09-26 14 views
0

「私はクリアテキストファイルになりたい」という解読テキストファイルに問題があります。暗号化されたテキストでPython AES Decryptが印刷されました

暗号化はうまくいきますが、復号化すると混在してテキストがクリアされ、データが暗号化されます。

今私は少しアマチュアですが、私は書くことがわかります。しかし、私はそれを得るためにあなたの助けが必要です。 def関数でビルドしようとしましたが、うまくいきませんでした。

暗号化のパディングが問題だと思っていますが、16バイトのテキストファイルでテストすると混合。テスト ため

#!/usr/bin/env python 

from Crypto.Cipher import AES 
from Crypto.Protocol.KDF import PBKDF2 
from Crypto import Random 
import os 

file_path = raw_input("Enter File path: ") 
if os.path.isdir(file_path): #check if the path exists 
    print "\nFile path founded, continue..\n" 
else: 
    print "\nFile path is not correct\nExiting.\n" 
    exit(0) 
file_name = raw_input("Enter File name: ") 
full_path = file_path + file_name 
if os.path.isfile(full_path): 
    print "\nFile name founded, continue..\n" 
else: 
    print "\nFile name is not correct\nExiting.\n" 
    exit(0) 



print "Now encrypt" 
key_size = 32 #AES256 
iterations = 10000 
key = os.urandom(32) 
read = open(full_path,'r+') 
line = read.readline() 
secret = line 
length = 16 - (len(secret) % 16) #PKCS7 adds bytes of the length of padding 
secret += chr(length) * length 
read.close() 
salt = Random.new().read(key_size) #salt the hash 
iv = Random.new().read(AES.block_size) 
derived_key = PBKDF2(key, salt, key_size, iterations) 
cipher = AES.new(derived_key, AES.MODE_CBC, iv) 

encodedtext = iv + cipher.encrypt(secret) 
read = open(full_path, 'w') 
read.write(encodedtext) 
read.close() 


print "Now decrypt" 
key_size2 = 32 #AES256 
iterations2 = 10000 
read2 = open(full_path,'r') 
line2 = read2.readline() 
secret2 = line2 
length2 = 16 - (len(secret2) % 16) #PKCS7 adds bytes of the length of padding 
secret2 += chr(length2) * length2 
read2.close() 
dencodedtext2 = iv + cipher.decrypt(secret2) 
read2 = open(full_path, 'w') 
read2.write(dencodedtext2) 
read2.close() 
print "that worked?" 

私は「/ ****/Dekstop/ /家と私は、ファイル与えた 『パスを与えた』テキストと 『test.txtのを私はクリアテキストファイル』 になりたいと私はクリアテキストfileԊԅԅᡶ䴈ᚖ↺髱준ქꂛ

なぜsecret2を印刷するときになりたい粁

悑晍㱣໸弧殲턕컫聅㇛좎䀋傖、これを得ました'dencodedtext2 = iv + cipher.decrypt(secret2)'の後にextは暗号化と混ざっていますか? どうすれば修正できますか? 何がすごくひどいですか?

ありがとうございました。

答えて

1

コード内の二つの主要なミスがあります。

  • IVが前に剥がさ(および中に使用)する必要が解読ではなく平文に再びそれを追加するのでは。現在のところ、平文はIVで始まり、次に解読されたIVで始まります。
  • 解読後にパディングを削除する必要があります。パディング関連のマックはまだ最後に表示されています。
+0

私は**解読の前にIV **を取り除いたのですか? 多くの場合、私は復号化の前にパディングを削除することができます。 例のどの場合ですか? – elad

+0

私はその努力をしたいとは思っていません。特に、あなたが提供したコードは、問題の分解*に関して別の問題やそのための方法で機能を分割することに多大な努力をしていないからです。さらに、配列を分割し、配列の右側からバイトを削除する方法についても説明します。ロケット科学ではないでしょうか?まわりにはたくさんの例があるはずです。 –

+0

お返事ありがとうございました。 – elad

関連する問題