2017-10-03 5 views
-1

J'essaye de crypter une chaîne qui sera décryptée plus tard pour une fonction de mot de passe.Cryptage ValueError: Les chaînes d'entrée doivent être un multiple de 16 en longueur

Cependant, lorsque j'essaye de le crypter, j'ai une erreur disant que la chaîne d'entrée doit être un multiple de 16 de longueur.

Ceci est mon code de cryptage, qui utilise la bibliothèque Jasypt2Python.

def test_basic_encryption(self): 
     try: 
      self.ciphertext = "encrypt123" 
      self.j2p = J2PEngine(self.ciphertext) 
      given_ciphertext = self.j2p.encrypt('mypw123.') 
     except Exception: 
      e_str = traceback.format_exc() 
      print(e_str) 

Une idée pour résoudre ce problème ou pour que mon mot de passe soit multiple de 16?

+0

Peut-être s'attend-il à ce que vous ajoutiez la longueur à un multiple de 16? –

+0

C'est exactement ce que je demande dans ma question. Je n'ai aucune idée de comment le remplir. Mais j'ai essayé de mettre ma chaîne à 16 caractères manuellement mais j'ai quand même eu la même erreur. – decemberrobot

+0

Avez-vous de la documentation pour la classe J2PEngine? –

Répondre

0

La plupart des chiffrements symétriques tels que AES fonctionnent comme des chiffrements de bloc. Ils chiffrent les données "bloc par bloc". Les algorithmes modernes utilisent des blocs de 128 bits - 16 octets.

Pour tamponner les données signifie par exemple étendre la chaîne "hello" (5 octets ASCII) à 16 octets. Une possibilité est d'ajouter 11 octets chacun avec la valeur 11. Si vous déchiffrez les données, vous devrez regarder le dernier octet (11) et supprimer ce nombre d'octets à la fin. Si votre texte est déjà un multiple de 16, ajoutez un nouveau bloc uniquement avec padding (chaque octet de la valeur 16).

Recherchez "Rembourrage PKCS5" pour les spécifications.