2014-05-17 57 views
2

我需要在oracle中获得MD5哈希值,对于这个我使用STANDARD_HASH函数,但是我的误解不大。为什么STANDARD_HASH('expr','MD5')的结果总是大写?

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

C47D187067C6CF953245F128B5FDE62A

字母字符是大写字母。

但在其他的数据库,例如在MySQL中,从结果:select md5('word')是:

c47d187067c6cf953245f128b5fde62a

完全一样的结果(小写)是由例如PHP的md5()功能。

问题:为什么要用大写字母返回oracle的STANDARD_HASH('expr','MD5')字母字符?这里不对劲?

+3

没有对错,只是一个供应商选择了大写字母,另一个供应商选择了十六进制数字的小写字母 – nos

+0

现在明白了,非常感谢。 – RIKI

+0

Oracle's finally创建了一个简单的哈希函数,呜呼!不幸的是,这意味着我将不得不重新编写这个程序_again_ :-(。我不知道为什么他们每次都弃用这个功能...... – Ben

回答

3

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

散列函数被定义为输出字节,而不指定任何十六进制编码。所以如果你想比较十六进制字符串而不是字节,在我看来,它是比较散列的首选方法,那么你需要做一个不区分大小写的比较。比较字节应该是首选。我个人比较喜欢大写字母(因为我认为它比较容易阅读(人们大部分阅读字母的顶部),并且因为至少有一个特定的标准,但其他人使用小写字母,并且有一些参数,好吧,

至于为什么Oracle针对该特定功能返回大写字母:这是一个只有甲骨文能够回答的问题,恐怕是“因为这就是它的定义”是我们唯一能够想到的东西

相关问题