更改开始

HASH 标量函数 (scalar function)

HASH函数返回一个长度可变的值,这是对第一个参数应用指定算法的结果。 该功能用于加密。

阅读语法图跳过可视化语法图HASH( 表达式,0,个算法)

该模式是 SYSIBM。

表达式
表示要散列的字符串值的表达式。 表达式必须返回一个内置字符串、图形字符串或二进制字符串。
算法
当函数名称为HASH时,表示要使用的哈希算法的整数常数值为0、1或2。 如果没有指定算法,则使用默认值0,即 MD5 算法。

结果是通过将哈希算法应用于表达式产生的。

函数的计算结果为VARBINARY,结果的长度属性取决于所使用的哈希算法。 下表总结了结果的特点:

表 1. 每种算法的结果特征
算法 算法参数值 结果大小 可返回的不同值数量 哈希函数结果数据类型
MD5 0 128 位 2128 VARBINARY(16)
SHA1 1 160 位 2160 VARBINARY(20)
SHA256 2 256 位 2256 VARBINARY(32)

如果第一个自变量可以为空,那么结果可以为空。 如果第一个自变量为空,那么结果为空值。

注意

安全方面的考虑:
SHA1 和 MD5 算法均存在安全漏洞。 可以在适用的一致性文档(如美国国家标准技术学会 (NIST) 特殊出版物 800-131A)中找到可接受的散列算法。
语法替代方案:
HASH函数与其他散列函数类似,散列算法是函数名称的一部分。 例如:
HASH_MD5  (  expression  )

建议使用哈希函数进行散列,以提高应用程序的可移植性。

示例

示例 1:
调用HASH函数,使用 MD5 算法生成一个哈希值。
SELECT HEX(HASH(’ABCDEFGHIJKLMNOPQRZTUVWXYZ’ , 0 )) 
FROM SYSIBM.SYSDUMMYU; 

返回值如下:

X’E433BC7BE26A152E54E2EA0C92778160’
示例 2:
调用 HASH_SHA1 函数,使用 SHA1 算法生成一个哈希值。
SELECT HEX(HASH(’ABCDEFGHIJKLMNOPQRZTUVWXYZ’, 1 )) 
FROM SYSIBM.SYSDUMMYU; 

返回值如下:

X’8F34563A0FA4BA1A285C8035935D010629385474’
示例 3:

调用 HASH_SHA256 函数,使用 SHA256 算法生成一个哈希值。

SELECT HEX(HASH(’ABCDEFGHIJKLMNOPQRZTUVWXYZ’ , 2 )) 
FROM SYSIBM.SYSDUMMYU;

返回值如下:

X’403AC046B04F4A749E9810971083997B71F2B6FAF87CECCDE657E93FFCF700F0’
更改结束