Click here to view and discuss this page in DocCommentXchange. In the future, you will be sent there automatically.
以散列形式返回指定值。
HASH( string-expression[, algorithm ] )
string-expression 要散列的值。此参数区分大小写,即使是在不区分大小写的数据库中也是如此。
algorithm 用于散列的算法。可接受的值包括:CRC32、MD5、SHA1、SHA1_FIPS、SHA256、SHA256_FIPS。缺省情况下使用 MD5 算法。经 FIPS 认证的算法需要单独的许可。
以下为返回类型,它们取决于所使用的算法:
CRC32 返回十六进制字符串。使用 HEXTOINT 函数将十六进制字符串转换为 32 位整数。
MD5 返回 VARCHAR(32)
SHA1 返回 VARCHAR(40)
SHA1_FIPS 返回 VARCHAR(40)
SHA256 返回 VARCHAR(64)
SHA256_FIPS 返回 VARCHAR(64)
使用散列函数可将每个传递到函数的值转换成唯一的字节序列。
如果使用 -fips 选项启动数据库服务器,则使用的算法或行为可能会不同,如下所述:
如果指定 SHA1,则使用 SHA1_FIPS
如果指定 SHA256,则使用 SHA256_FIPS
如果指定 MD5,则返回错误
在 FIPS 模式下允许使用未经 FIPS 认证的 CRC32 算法,因为未视其为加密算法。
所有这些算法都是单向散列算法。无法通过散列值重新创建原始字符串。
SQL/2008 服务商扩充。
以下示例创建了一个称为 user_info 的表,以存储应用程序用户的信息(包括用户 ID 和口令)。还会向该表中插入一行。通过使用 HASH 函数和 SHA256 算法求出口令的散列值。如果不想以明文存储口令,而某个外部应用程序需要对口令进行比较,则以此方式存储散列值形式的口令可能会有用处。
CREATE TABLE user_info ( employee_id INTEGER NOT NULL PRIMARY KEY, user_name CHAR(80), user_pwd CHAR(80) ); INSERT INTO user_info VALUES ( '1', 's_phillips', HASH( 'mypass', 'SHA256' ) );