MYSQL TripleDES 算法生成专有垃圾(没有密码理解它)

问题描述 投票:0回答:2

我正在尝试使用 MYSQL 方法来使用值为“symmetry_encryption.php”的密钥来加密字符串(仅作为示例)。然而输出是其他密码无法理解的垃圾。我尝试了一切,但无论如何它都会产生相同的垃圾。它可以解密这些垃圾,但如果没有其他工具可以做到同样的事情,那还有什么意义呢?

select HEX(DES_ENCRYPT('test12345','symmetric_encryption.php'));

输出为 FFDAF66D7309B91B9DC5CBC25F7514AFC4,而应为 e52099eb5e0f81e8bd24315f3a80ac7c

(在这里查看示例https://www.tools4noobs.com/online_tools/encrypt/

select TO_BASE64(DES_ENCRYPT('test12345','symmetric_encryption.php'));

输出 /9r2bXMJuRudxcvCX3UUr8Q= 时应为 5SCZ614Pgei9JDFfOoCsfA==

有很多在线工具可以验证 TripleDES 加密的结果。

MYSQL 输出不一致。 MYSQL 产生的结果无法用任何其他加密工具解密,只能用 mysql 本身解密。

我设置了块大小

SET block_encryption_mode = 'aes-128-ecb';

什么是不必要的,因为它是默认的并且我的编码都是UTF8

这是死胡同还是有解决办法?

mysql encryption base64 tripledes
2个回答
3
投票

这就是 MySQL 在使用

DES_ENCRYPT
加密某些内容时所做的事情:

  • 带有 EDE 和 192 位密钥的三重 DES(168 位,无奇偶校验位)
  • 192 位密钥是使用 OpenSSL 的
    EVP_BytesToKey
    通过一次迭代和 MD5 根据给定密码生成的
  • CBC 模式,但由
    EVP_BytesToKey
    与密钥一起生成的初始化向量被清零,因此它本质上是 0x0000000000000000 IV
  • 使用了某种 PKCS#5 兼容的填充(最后一个字节表示填充字节数):代码实际上并未初始化其他填充字节,因此这本质上会导致 ISO 10126 填充
  • 密文的第一个字节实际上并未加密,而是表示密钥文件中使用的密钥,但这仅在没有密码短语传递给
    DES_ENCRYPT
    时才有意义;可以安全地忽略它。

如果你想亲自查看,代码位于root/sql/item_strfunc.cc。 Here 是该文件中有趣的部分。不用说,这不是一个很好的加密方式。


0
投票

按照@Artjom B.的大纲,我能够使用以下代码(python 3.12)解密MySQL“垃圾”。

from hashlib import md5 
from Crypto.Cipher import DES3

class MySQLDES:
    def __init__(self, password):
        passbytes = password.encode() 
        key =  md5(passbytes).digest()          # 16 bytes 
        key += md5(key + passbytes).digest()    # extend to 32 bytes 
        key = DES3.adjust_key_parity(key[:24])  # take first 24
        self.cipher = DES3.new(
            key, 
            DES3.MODE_CBC, 
            iv=bytes.fromhex('00') * 8) 

 
    def decrypt(self, hexstr): 
        cipherbytes = bytes.fromhex(hexstr) 
        clearbytes = self.cipher.decrypt(cipherbytes[1:])
        clearbytes = clearbytes[:-clearbytes[-1]]
        
        return clearbytes.decode() 

用途:

des = MySQLDES('<password>')
des.decrypt('<hex string starting with FF>')
© www.soinside.com 2019 - 2024. All rights reserved.