
HASH 标量函数 (scalar function)
HASH函数返回一个长度可变的值,这是对第一个参数应用指定算法的结果。 该功能用于加密。
该模式是 SYSIBM。
- 表达式
- 表示要散列的字符串值的表达式。 表达式必须返回一个内置字符串、图形字符串或二进制字符串。
- 算法
- 当函数名称为HASH时,表示要使用的哈希算法的整数常数值为0、1或2。 如果没有指定算法,则使用默认值0,即 MD5 算法。
结果是通过将哈希算法应用于表达式产生的。
函数的计算结果为VARBINARY,结果的长度属性取决于所使用的哈希算法。 下表总结了结果的特点:
| 算法 | 算法参数值 | 结果大小 | 可返回的不同值数量 | 哈希函数结果数据类型 |
|---|---|---|---|---|
| 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’

