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

时间:2016-04-25 17:12:04

标签: mysql encryption base64 tripledes

我正在尝试使用MYSQL方法使用值为'symmetric_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

它是死路还是有解决方案?

1 个答案:

答案 0 :(得分:2)

这是MySQL在使用DES_ENCRYPT加密某些内容时所做的事情:

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

如果您想亲眼看看,代码位于root / sql / item_strfunc.cc中。 Here是该文件的有趣部分。毋庸置疑,这不是加密内容的好方法。