首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将Oracle MD5转换为MySQL或Ruby

问将Oracle MD5转换为MySQL或Ruby
EN

Stack Overflow用户
提问于 2013-10-08 11:03:39
回答 2查看 315关注 0票数 0

我有以下用于检查用户密码的Oracle函数,但我想切换到MySQL。我正在寻找一组能产生相同结果的MySQL函数。

代码语言:javascript
复制
FUNCTION encpasswd (ID IN VARCHAR, passwd IN VARCHAR)

   RETURN VARCHAR

IS

   v_result   VARCHAR2 (4000);

BEGIN

   v_result := DBMS_OBFUSCATION_TOOLKIT.md5 (input_string => ID || passwd);

   --RETURN RAWTOHEX (v_result);

   RETURN v_result;

END encpasswd;
EN

回答 2

Stack Overflow用户

发布于 2013-10-08 11:45:37

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

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

代码语言:javascript
复制
SELECT hex(aes_encrypt('test-data', unhex(MD5('test_key'))));

结果是:

代码语言:javascript
复制
8FCA326C25C8908446D28884394F2E22

SQLFiddle for MySQL

它也是一个32个十六进制字符的字符串。但在其他方面,它的结果与Oracle相同。

和BTW:

  • MySQL使用PKCS7 padding。
  • PKCS5 padding和PKCS7 padding是同一个。因此Oracle padding选项是正确的。
  • MySQL使用ECB块密码模式。因此,您必须相应地调整代码。(前16个字节没有任何区别。)
  • MySQL不使用初始化向量(与您的Oracle代码相同)。
  • MySQL使用非标准的折叠键。因此,为了在MySQL和Oracle (或.NET或Java)中实现相同的结果,只需使用16字节长的键。
票数 0
EN

Stack Overflow用户

发布于 2013-10-08 11:45:47

Mysql有一个原生的"md5“函数。

代码语言:javascript
复制
SELECT md5(concat(id, passwd)) FROM yourtable

作为函数:

代码语言:javascript
复制
CREATE FUNCTION `encpasswd`(`ID` VARCHAR(250), `passwd` VARCHAR(250)) RETURNS VARCHAR(250)
BEGIN
    RETURN md5(concat(ID,passwd))
END
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/19238372

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档