私は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" "))
はあなたが助けてください
はここでスクリプトによって使用される値ですか?おかげで
多分これは役に立ちます: 'https:// stackoverflow.com/questions/17773450/why-must-all-inputs-to-aes-be-16の倍数 ' – mbieren
あなたが提供した'暗号化されたパス'あなたは75バイトを取得します。 75バイトは、AESが要求する16の倍数ではありません。あなたの提供された「暗号化されたパス」、または暗号化/エンコードの仕組みを理解して何かが間違っています。 –
おかげでみんな@ EbbeM.Pedersenスクリプトがパスワードを暗号化するために同じ手順を使用した場合、良い点ですが、結果は正しいと解読可能なはずですか?スクリプトを実行している間にこれらの値を表示したばかりです。だから、私は暗号化側もチェックし、これらの値はDBに保存され、このスクリプトで復号化に使用されるので、おそらくプロセスのどこかが台無しになることがあります。 – InToSSH