为什么STANDARD_HASH('expr','MD5')的结果总是大写?

时间:2014-05-17 17:44:00

标签: oracle encryption hash md5 oracle12c

我需要在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')字母字符?这里出了什么问题?

1 个答案:

答案 0 :(得分:3)

十六进制编码没有标准化的案例(大写或小写)。根据{{​​3}},编码应为大写。但是还有其他标准使用小写。

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

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

至于为什么Oracle为特定功能返回大写:这是一个只有甲骨文可以回答的问题我害怕。 "因为它是如何定义的"是我们唯一能想到的。