mysql跟oracle加密算法_Oracle和MySQL中的AES加密给出了不同的结果

本文探讨了Oracle使用AES-128加密并进行哈希处理的数据库安全特性,与MySQL中纯文本加密和MD5哈希的对比。作者发现两者加密结果不一致,重点在于Oracle使用PKCS5填充与MySQL的默认PKCS7差异。

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

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

相同的数据可以在MySQL中以纯文本形式获得。因此,为了比较这些数据,我尝试了加密,然后对MySQL数据进行哈希处理,同时遵循Oracle中完成的相同步骤。

经过大量尝试后,我终于发现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中使用CBC或CBE也会得到相同的结果,因为IV没有被传递给该函数,因此使用了IV的缺省值,即NULL

BOUNTY:

如果有人可以验证我的最后一条评论,并且如果在双方使用相同的填充,将得到相同的结果可以得到赏金:

@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)

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值