2017-09-07 1 views
0

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

+0

Peut-être que cela aide: 'https: // stackoverflow.com/questions/17773450/pourquoi-doit-toutes-entrées-à-aes-être-multiples-de-16' – mbieren

+0

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é. –

+0

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

Répondre

0

Alors, pour tout le monde face à ce problème avec le paquet modoboa-imap-migration

Le problème est que dans le tableau DB modoboa_imap_migration_migration ce stocke paquet tous les mots de passe pour la migration, hovewer la colonne _password est se varchar (100) n'est pas suffisant pour que la passe chiffrée soit enregistrée. J'ai augmenté cela à varchar (255) et maintenant tout fonctionne bien.