HASH( ) 函数

根据输入值返回一个加盐加密哈希值。

语法

HASH( <,加盐值>)

参数

名称 类型 描述

字符

数值

日期时间

逻辑

要进行哈希处理的值。

加盐值

可选

字符

数值

要使用的加盐值。您可以指定一个从 1 到 10 的 PASSWORD 标识符数字或一个字符串。

如果省略,则使用 Analytics 默认加盐值。

加盐值被限制为 128 个字符,如果您指定较长的加盐值,则被自动截断为 128 个字符。

要了解更多信息,请参考加盐值

输出

字符。

示例

基本示例

使用 Analytics 默认加盐值

返回 "819A974BB91215D58E7753FD5A42226150100A0763087CA7DECD93F3C3090405":

HASH("555-44-3322")

返回信用卡号域中每个数字的哈希值:

HASH(信用卡号)

使用用户指定的加盐值

返回 "AD1E7D9B97B6F6B5345AB13471A74C31EBE6630CA2622BB7E8C280E9FBEE1F17":

HASH("555-44-3322", "my salt value 123")

高级示例

确保哈希值完全相同

将其他函数与 HASH( ) 结合使用,以标准化应该生成完全相同哈希值的明文值。

考虑下面这组示例。请注意明文值的大小写如何完全改变了前两个示例中的输出哈希值。

返回 "DF6789E1EC65055CD9CA17DD5B0BEA5892504DFE7661D258737AF7CB9DC46462":

HASH("John Smith")

返回 "3E12EABB5940B7A2AD90A6B0710237B935FAB68E629907927A65B3AA7BE6781D":

HASH("JOHN SMITH")

通过使用 UPPER( ) 函数标准化大小写,生成了完全相同的哈希值。

返回 "3E12EABB5940B7A2AD90A6B0710237B935FAB68E629907927A65B3AA7BE6781D":

HASH(UPPER("John Smith"))

使用 HASH( ) 比较大型文本块。

使用 HASH( ) 测试两个注释域中的文本块是否完全相同。

要执行此测试,请创建两个如下所示的计算域,然后创建一个过滤器以查找任何不完全相同的文本块。

DEFINE FIELD 哈希_1 COMPUTED HASH(注释域_1)
DEFINE FIELD 哈希_2 COMPUTED HASH(注释域_2)
SET FILTER TO 哈希_1 <> 哈希_2

如果注释域位于不同的表中,请在每个表中创建一个 HASH( ) 计算域,然后使用这些计算域作为共同键域对两个表执行非匹配联接。联接输出表中的记录表示不完全相同的文本块。

备注

何时使用 HASH( )

使用 HASH( ) 函数可保护敏感数据,如信用卡号、薪水信息或社会保险号。

工作原理

HASH( ) 提供单向编码。明文中的数据可用于产生哈希值,但该哈希值随后无法被解码或解密。

特定的明文值始终产生相同的哈希值,因此您可以在已进行哈希处理的信用卡号域中搜索重复项,或者联接两个已进行哈希处理的信用卡号域,结果将是相同的,就好像您已对等效的明文域执行该操作一样。

保护敏感数据

要避免将敏感数据存储在服务器上,您可以使用 HASH( ) 函数在本地创建一个计算域,然后通过以下方法创建一个新表:提取已进行哈希处理的域和任何其他必需的域,同时排除明文域。您可以使用服务器上的新表进行解析,一旦您获得了结果,如果您需要查看已进行哈希处理的任何数据的明文版本,请返回去参考一下原始表。

如果禁止在初始使用后在本地存储敏感数据,您可以在创建包含哈希值的新表之后删除原始表,并参考原始源系统以获取明文值。

明文值必须完全相同

为了产生相同的哈希值,两个明文值必须完全相同。例如,包含或不包含连字符的同一信用卡号,大小写形式不同的同一名称,都会产生不同的哈希值。

您可能需要在 HASH( ) 函数中混合使用 INCLUDE( )、EXCLUDE( ) 和 UPPER( ) 等函数来标准化明文值。

前导和后继空白都被 HASH( ) 函数自动切除,因此无须使用 TRIM( ) 或 ALLTRIM( ) 函数。

如果前导或后继空白是有意义的,该怎么办?

如果您的数据所包含的前导或结尾空白表示不同值之间有意义的差异,则需要在对值进行哈希处理之前将空白替换为其他字符。

在执行哈希之前,将域值中的空白替换为下划线字符 (_):

HASH(REPLACE(域名, " ", "_"))

HASH( ) 所使用的加密算法

HASH( ) 使用 SHA-2 加密哈希算法,无论输入值的长度如何,该算法都会产生 64 字节的固定长度哈希输出。明文输入值可以比 64 字节长。

加盐值

工作原理

HASH( ) 函数所提供的保护通过在进行哈希处理之前自动添加加盐值而得到了增强。加盐值是用源数据值连接的字母数字字符串。所连接的整个字符串随后被用于产生加盐哈希值。此方法使哈希值能够更好地抵抗解码技术。

选择性地指定您自己的加盐值

除非您指定加盐值,否则会使用固定的默认加盐值。您可以使用以下方法之一指定加盐值:

  • 将加盐值指定为明文字符串

    指定一个字母数字字符串。例如:

    HASH(信用卡号, "my salt value")
  • 将加盐值指定为密码

    将 PASSWORD 命令与 HASH( ) 函数结合使用并指定一个从 1 到 10 的 PASSWORD 标识符数字。例如:

    PASSWORD 3 "输入一个盐值"
    EXTRACT FIELDS HASH(Credit_card_num, 3) TO "Protected_table"

    说明

    必须首先输入  PASSWORD 加盐值,然后才能提取 HASH( ) 函数中的域。

    将 PASSWORD 标识符数字与 HASH( ) 结合使用的好处是您无须公开明文加盐值。

    要了解更多信息,请参考PASSWORD 命令

密码方法指南

密码方法可供在脚本的开头或 HASH( ) 函数之前用来提示输入密码。

密码方法不适合于在计算域中使用,因为当您关闭 Analytics 时,PASSWORD 分配将被删除。

此外,当您重新打开 Analytics 时,使用基于密码的加盐值的计算域会被自动从视图中移除。要避免使用默认加盐值重新计算哈希值,此移除操作是必要的。重新计算的值不同于使用用户提供的加盐值计算的原始哈希值。

ACL 脚本指南 14.1