AES_ENCRYPT
我在 ECB 128 位模式下加密了 2 个 MySQL 数据库。现在我忘记了我的加密密钥,但我有纯文本(我有一个没有加密的数据库,也有加密的)。如何找到加密密钥以便我可以解密我的其他数据库?
我听说了已知的纯文本攻击,如何做到这一点?Kali Linux 中是否有任何工具或 GitHub 上有一些 python 脚本?
AES_ENCRYPT
我在 ECB 128 位模式下加密了 2 个 MySQL 数据库。现在我忘记了我的加密密钥,但我有纯文本(我有一个没有加密的数据库,也有加密的)。如何找到加密密钥以便我可以解密我的其他数据库?
我听说了已知的纯文本攻击,如何做到这一点?Kali Linux 中是否有任何工具或 GitHub 上有一些 python 脚本?
实际上,不,你不能。AES 像大多数分组密码一样,对已知的明文攻击具有很强的抵抗力。幸运的是,您没有丢失任何信息并拥有原始数据库备份,因为您唯一真正的选择是尝试强力加密,这可能需要比宇宙的长度更长的时间(除非您可以大大缩小可能的密钥通过几乎记住你的密码?)
您要求的是已知纯文本攻击 (KPA)。您在 ECB 中描述的弱点是两个具有相同明文的加密块使用相同的密文加密。
这只是意味着您知道密文中的两个加密块看起来相同,并不意味着您可以轻松恢复纯文本。答案是:不,您将无法恢复密钥。
这称为针对密码的已知明文攻击,是主要的设计考虑因素。您想要做的事情被认为是不可能的,除非有任何重大发现是 AES 的弱点。这里还有另一个 Q/A 可以帮助您进一步了解:
https://crypto.stackexchange.com/questions/1512/why-is-aes-resistant-to-known-plaintext-attacks
密码仅对固定长度的位进行操作,因此链接模式用于加密任意长度的数据。ECB 是最简单的一种,它一次只加密一个块。主要弱点是相同的块产生相同的加密输出,这是信息的主要泄漏。它还为重放攻击创造了机会,攻击者可以重新发送他们认为自己知道内容的加密块。不幸的是,这不会让您更接近使用已知纯文本的密钥恢复。
如果您使用密码来生成密钥,那么您可能会遇到一种可行的攻击,并且您记得例如它正好是 12 个字符长并且有 3 位数字。这主要限制了密码空间,并可能允许暴力分析工作。