puisque je n'ai pas beaucoup de connaissances de Python ou de la cryptographie, je n'ai pas été capable de comprendre la solution, mais je suppose que le problème est avec le rembourrage. Ce script obtient et déchiffre le mot de passe en utilisant deux fonctions. Je reçois une erreur:Rembourrage Python pour la cryptographie AES
ValueError: The length of the provided data is not a multiple of the block length.
qui je pense a quelque chose à voir avec un rembourrage.
Voici les valeurs utilisées par le script:
clés: 8$4Tws[14R!,0Ba|
passe Encrypted: YTj+F1oo5OUNBgKyfifN/2R2zvFLFHbXu4Te2+OvBJ7JRae1DMVJR42qK0GucmiUyTGdtQzFSUeNqitBrnJolMkxp7UMxUlHeaor
Fonctions:
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" "))
Pouvez-vous s'il vous plaît aider? Merci
Peut-être que cela aide: 'https: // stackoverflow.com/questions/17773450/pourquoi-doit-toutes-entrées-à-aes-être-multiples-de-16' – mbieren
Si vous base64 décoder votre 'passe crypté' fourni 'vous obtenez 75 octets. Les 75 octets ne sont pas un multiplum de 16, comme requis par AES. Quelque chose ne va pas avec votre 'Passe cryptée' fournie, ou avec votre compréhension de la façon dont il est crypté/encodé. –
merci les gars .. @ EbbeM.Pedersen c'est un bon point, si le script utilisé la même procédure pour crypter le mot de passe, le résultat devrait être valide et décryptable, non? ces valeurs que je viens d'imprimer lors de l'exécution du script. Donc, je vais vérifier le côté de cryptage, ces valeurs sont enregistrées dans la base de données et ensuite utilisées par ce script pour les décrypter, donc peut-être quelque part dans le processus il est foiré. – InToSSH