gpt4 book ai didi

mysql - Oracle 和 MySQL 中的 AES 加密给出了不同的结果

转载 作者:可可西里 更新时间:2023-11-01 06:36:47 25 4
gpt4 key购买 nike

我需要比较 Oracle 数据库和 MySQL 数据库之间的数据。

在 Oracle 中,数据首先使用 AES-128 算法加密,然后进行哈希处理。这意味着无法恢复和解密数据。

相同的数据在 MySQL 中可用,而且是纯文本形式。因此,为了比较数据,我尝试按照在 Oracle 中完成的相同步骤对 MySQL 数据进行加密然后散列。

经过多次尝试,我终于发现MySQL中的aes_encrypt返回的结果与Oracle中的不同。

-- ORACLE:
-- First the key is hashed with md5 to make it a 128bit key:
raw_key := DBMS_CRYPTO.Hash (UTL_I18N.STRING_TO_RAW ('test_key', 'AL32UTF8'), DBMS_CRYPTO.HASH_MD5);

-- Initialize the encrypted result
encryption_type:= DBMS_CRYPTO.ENCRYPT_AES128 + DBMS_CRYPTO.CHAIN_CBC + DBMS_CRYPTO.PAD_PKCS5;

-- Then the data is being encrypted with AES:
encrypted_result := DBMS_CRYPTO.ENCRYPT(UTL_I18N.STRING_TO_RAW('test-data', 'AL32UTF8'), encryption_type, raw_key);

oracle 代码的结果将是:8FCA326C25C8908446D28884394F2E22

-- MySQL
-- While doing the same with MySQL, I have tried the following:
SELECT hex(aes_encrypt('test-data', MD5('test_key'));

MySQL 代码的结果将是:DC7ACAC07F04BBE0ECEC6B6934CF79FE

我错过了什么吗?还是不同语言之间的加密方式不一样?

更新:根据下面的评论,我相信我应该提到一个事实,即Oracle中的DBMS_CRYPTO.Hash的结果与MySQL中的MD5函数返回的结果相同。

在 Oracle 中使用 CBCCBE 也会得到相同的结果,因为 IV 没有传递给函数,因此使用 IV 的默认值这是NULL

赏金:如果有人可以验证我最后的评论,并且如果在两边使用相同的填充,将产生相同的结果,则可以获得赏金:

@rossum The default padding in MySQL is PKCS7, mmm... Oh.. In Oracle it's using PKCS5, can't believe I didn't notice that. Thanks. (Btw Oracle doesn't have the PAD_PKCS7 option, not in 11g at least)

最佳答案

MySQL 的MD5 函数返回一个包含 32 个十六进制字符的字符串。它被标记为二进制字符串,但它不是人们所期望的 16 字节二进制数据。

因此要修复它,必须将此字符串转换回二进制数据:

SELECT hex(aes_encrypt('test-data', unhex(MD5('test_key'))));

结果是:

8FCA326C25C8908446D28884394F2E22

它又是一个由 32 个十六进制字符组成的字符串。但除此之外,结果与 Oracle 相同。

顺便说一句:

  • MySQL 使用 PKCS7 填充。
  • PKCS5 填充和 PKCS7 填充是一样的。所以 Oracle 填充选项是正确的。
  • MySQL 使用 ECB 分组密码模式。所以你必须相应地调整代码。 (前 16 个字节没有任何区别。)
  • MySQL 不使用初始化向量(与您的 Oracle 代码相同)。
  • MySQL 使用非标准折叠键。因此,要在 MySQL 和 Oracle(或 .NET 或 Java)中获得相同的结果,只能使用 16 字节长的键。

关于mysql - Oracle 和 MySQL 中的 AES 加密给出了不同的结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7271022/

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