【问题标题】:How to use implement AES_DECRYPT() of MySQL by Python如何使用 Python 实现 MySQL 的 AES_DECRYPT()
【发布时间】:2018-07-06 20:12:46
【问题描述】:

我正在尝试编写一个 python 代码,它具有与 MySQL 的 AES_ENCRYPTAES_DECRYPT 相同的功能。 https://dev.mysql.com/doc/refman/5.6/ja/encryption-functions.html

我想在 MySQL 和 Python 之间加密和解密数据。

比如我想用python解密数据,用MySQL的AES_ENCRYPT加密。

我想用 MySQL 的AES_DECRYPT 解密数据,反过来用 Python 加密。

我在 Python 中找到了 AES_ENCRYPT 的示例。 https://www.maykinmedia.nl/blog/2012/nov/15/mysql-aes_encrypt-python/

有谁知道如何实现解密部分?

【问题讨论】:

  • 我不太确定你到底想要什么。问题的语言建议您要在 python 中使用 MySQL 提供的 aes_encrypt() / aes_decrypt() 函数。在这种情况下,您只需将参数传递给 MySQL 查询,MySQL 负责加密/解密。但是链接的示例模仿了python中的上述 aes_encrypt() 函数,这与 MySQL 无关。那么,您真正需要哪种方法?
  • 您可以edit您的问题以提供有关您要求的更多详细信息。
  • 我编辑了我的问题。
  • 有什么理由让你的生活变得复杂吗?坚持一种或另一种方法。顺便说一句,用于加密数据的参数也应该用于解密。 AES 是一种对称密钥加密。
  • 我有一个 MySQL 的 sql 文件,里面有一些加密数据。我想在没有 MySQL 的情况下用 Python 阅读它。是的。我知道 AES 需要一个密钥,并且我知道 MySQL 中使用的密钥。

标签: python mysql security aes


【解决方案1】:

我终于做到了。

def mysql_aes_decrypt(val, key):

    def mysql_aes_key(key):
        final_key = bytearray(16)
        for i, c in enumerate(key):
            final_key[i % 16] ^= ord(key[i])
        return bytes(final_key)

    k = mysql_aes_key(key)

    cipher = AES.new(k, AES.MODE_ECB)

    return cipher.decrypt(val).decode()

【讨论】:

  • 您好,感谢您提供此代码。当我使用它时,我在代码中看到了一个问题。 UnicodeDecodeError: 'ascii' codec can't decode byte 0xf3 in position 0: ordinal not in range(128)。此错误源于最后一行:return cipher.decrypt(val).decode()。如果我只是保持为cipher.decrypt(val),则没有错误,但字符不可读。
  • @Raghuram 是的,那是因为你没有解码它,问题在于你的价值,先阅读问题中的链接
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-05-29
  • 2018-09-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-08-05
相关资源
最近更新 更多