2017-09-07 16 views
0

私はPythonや暗号の知識があまりないため、解決策を見つけられませんでしたが、問題はパディングにあると思います。 このスクリプトは、2つの機能を使用してパスワードを取得および復号化します。 私はエラーを取得しています:私は、パディングとは何かを持っていると思い暗号化のためのPythonパディングAES

ValueError: The length of the provided data is not a multiple of the block length.

を。

キー:8$4Tws[14R!,0Ba|

暗号化されたパス:YTj+F1oo5OUNBgKyfifN/2R2zvFLFHbXu4Te2+OvBJ7JRae1DMVJR42qK0GucmiUyTGdtQzFSUeNqitBrnJolMkxp7UMxUlHeaor

機能:

from django.utils.encoding import force_bytes, force_text 

from cryptography.hazmat.primitives.ciphers import Cipher, algorithms, modes 
from cryptography.hazmat.backends import default_backend 

@property 
def password(self): 
    """Password getter.""" 
    return decrypt(self._password) 

def decrypt(ct): 
    backend = default_backend() 
    key = param_tools.get_global_parameter("secret_key", app="core") 
    print(key) 
    cipher = Cipher(
     algorithms.AES(force_bytes(key)), modes.ECB(), backend=backend) 
    ct = base64.b64decode(force_bytes(ct)) 
    decryptor = cipher.decryptor() 
    clear = decryptor.update(ct) + decryptor.finalize() 
    return force_text(clear.rstrip(b" ")) 

はあなたが助けてください

はここでスクリプトによって使用される値ですか?おかげで

+0

多分これは役に立ちます: 'https:// stackoverflow.com/questions/17773450/why-must-all-inputs-to-aes-be-16の倍数 ' – mbieren

+0

あなたが提供した'暗号化されたパス'あなたは75バイトを取得します。 75バイトは、AESが要求する16の倍数ではありません。あなたの提供された「暗号化されたパス」、または暗号化/エンコードの仕組みを理解して何かが間違っています。 –

+0

おかげでみんな@ EbbeM.Pedersenスクリプトがパスワードを暗号化するために同じ手順を使用した場合、良い点ですが、結果は正しいと解読可能なはずですか?スクリプトを実行している間にこれらの値を表示したばかりです。だから、私は暗号化側もチェックし、これらの値はDBに保存され、このスクリプトで復号化に使用されるので、おそらくプロセスのどこかが台無しになることがあります。 – InToSSH

答えて

0

だから、誰もがパッケージにこの問題に直面するためにmodoboa-imap-migration

問題は、DBテーブルの移行のためのmodoboa_imap_migration_migration、このパッケージを格納し、すべてのパスワードは、列_passwordはVARCHAR(100)にSEであるhovewerということでした暗号化されたパスを保存するには十分ではありません。私はこれをvarchar(255)に増やし、今はすべて正常に動作します。