我需要在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')字母字符?这里出了什么问题?
答案 0 :(得分:3)
十六进制编码没有标准化的案例(大写或小写)。根据{{3}},编码应为大写。但是还有其他标准使用小写。
散列函数被定义为输出字节,而不指定任何十六进制编码。因此,如果你想比较十六进制字符串而不是字节,在我看来,这是比较哈希的首选方法,那么你需要做一个不区分大小写的比较。但是,比较字节应该是首选。
我个人更喜欢大写(因为我觉得它更容易阅读(人们主要阅读字母的顶部)并且因为它至少有一个特定的标准。但是其他人使用小写,并且有相关的论据
至于为什么Oracle为特定功能返回大写:这是一个只有甲骨文可以回答的问题我害怕。 "因为它是如何定义的"是我们唯一能想到的。