加密ValueError:输入字符串的长度必须为16的倍数

时间:2017-10-03 03:18:14

标签: python encryption base64 valueerror

我正在尝试加密一个字符串,稍后将为密码函数解密。

但是,当我尝试加密它时,我收到一个错误,说输入字符串必须是16的倍数。

这是我的加密代码,它使用库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)

知道如何解决此问题或将密码设为16的倍数?

1 个答案:

答案 0 :(得分:0)

大多数对称密码(如AES)都可以作为所谓的分组密码。他们“逐块”加密数据。现代算法使用128位块--16个字节。

填充数据意味着例如将字符串“hello”(5字节ASCII)扩展为16字节。一种可能性是添加11个字节,每个字节值为11.如果解密数据,则必须查看最后一个字节(11)并从末尾删除此字节数。如果您的文本已经是16的倍数,则仅使用填充添加新块(每个字节值为16)。

查看规范的“PKCS5填充”。