【问题标题】:Why is result from STANDARD_HASH('expr', 'MD5') always in uppercase?为什么 STANDARD_HASH('expr', 'MD5') 的结果总是大写?
【发布时间】:2014-05-17 17:44:00
【问题描述】:

我需要在oracle中获取MD5哈希,为此我使用STANDARD_HASH函数,但我有一点误解。

在 oracle 中:select STANDARD_HASH('word', 'MD5') from dual 结果是:

C47D187067C6CF953245F128B5FDE62A

字母字符为大写。

但在其他数据库中,例如在 mysql 中,结果来自:select md5('word') 是:

c47d187067c6cf953245f128b5fde62a

完全相同的结果(小写)来自例如 php 的 md5() 函数。

问题:为什么返回oracle的STANDARD_HASH('expr', 'MD5')字母大写?这里有什么问题吗?

【问题讨论】:

  • 没有对错,只是一个供应商选择了大写另一个供应商选择了小写的十六进制数字。
  • 现在明白了,非常感谢。
  • Oracle 终于创建了一个简单的哈希函数,哇哦!不幸的是,这确实意味着我将不得不重新编写大量再次 :-(。我不知道他们为什么每次都弃用这个功能......

标签: oracle encryption hash md5 oracle12c


【解决方案1】:

没有用于十六进制编码的标准化大小写(大写或小写)。根据RFC 4648,编码应为大写。但是还有其他使用小写字母的标准。

哈希函数被定义为输出字节,没有指定任何十六进制编码。因此,如果您想比较十六进制字符串而不是字节,在我看来,这是比较哈希的首选方法,那么您需要进行不区分大小写的比较。然而,比较字节应该是首选。

我个人更喜欢大写(因为我认为它更容易阅读(人们主要阅读字母的顶部)并且因为它至少有一个特定的标准。但其他人使用小写,并且也有争论.

至于为什么 Oracle 会为该特定函数返回大写字母:恐怕这是一个只有 Oracle 才能回答的问题。 “因为它是这样定义的”是我们唯一能想到的。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多