【问题标题】:Encryption ValueError: Input strings must be a multiple of 16 in length加密 ValueError:输入字符串的长度必须是 16 的倍数
【发布时间】:2018-03-14 04:27:34
【问题描述】:

我正在尝试加密一个字符串,该字符串稍后将被解密以获得密码功能。

但是,当我尝试对其进行加密时,我收到一条错误消息,提示输入字符串的长度必须是 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 的倍数吗?

【问题讨论】:

  • 也许它希望您将长度填充为 16 的倍数?
  • 这正是我在我的问题中要问的。我不知道如何填充它。但是我尝试手动将我的字符串设置为 16 个字符,但仍然出现相同的错误。
  • 你有 J2PEngine 类的文档吗?
  • 如果作者评论出来,一定是有充分理由的。为什么你期望代码能够工作?这有点像从垃圾桶里拿出一个灯泡,然后抱怨它不会亮起来。

标签: python encryption base64 valueerror


【解决方案1】:

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

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

查找规范中的“PKCS5 填充”。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-03-24
    • 1970-01-01
    • 2019-01-04
    • 1970-01-01
    • 1970-01-01
    • 2012-05-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多