gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-29 02:17:47 26 4
gpt4 key购买 nike

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

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 本身。

我设置 block 大小

SET block_encryption_mode = 'aes-128-ecb';

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

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

最佳答案

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

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

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

关于MYSQL TripleDES 算法生成专有垃圾(没有密码理解它),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36846936/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com