Click here to view and discuss this page in DocCommentXchange. In the future, you will be sent there automatically.

SQL Anywhere 11.0.1 (中文) » SQL Anywhere 服务器 - SQL 参考 » 使用 SQL » SQL 函数 » SQL 函数 (E-O)

 

ENCRYPT 函数 [String]

使用所提供的加密密钥对指定值进行加密,并返回 LONG BINARY 类型的值。

语法
ENCRYPT( string-expression, key 
[, algorithm ] 
)
algorithm : 
'AES' 
| 'AES256' 
| 'AES_FIPS' 
| 'AES256_FIPS'
参数
  • string-expression   要加密的数据。也可以将二进制值传递给此函数。此参数区分大小写,即使是在不区分大小写的数据库中也是如此。

  • key   用来对 string-expression 进行加密的加密密钥。解密时必须使用同一密钥才能获得原始值。此参数区分大小写,即使是在不区分大小写的数据库中也是如此。

    与大多数口令一样,最好选择无法被轻易猜到的密钥值。建议选择满足以下条件的密钥值:长度至少为 16 个字符,混合使用大小写并包含数字、字母和特殊字符。每次要对数据进行解密时,都需要使用此密钥。

    小心

    对于高度加密的数据库,请务必将密钥的副本保存在安全的位置。如果丢失了加密密钥,就没有办法访问数据,即使有技术支持人员协助也不行。此时必须放弃该数据库并创建一个新的数据库。

  • algorithm   此可选参数指定在对 string-expression 进行加密时所使用的算法。用于高度加密的算法是 Rijndael:它是一种数据块加密算法,美国国家标准与技术协会(National Institute of Standards and Technology,简称 NIST)选择它作为新的数据块编码器高级加密标准(Advanced Encryption Standard,简称 AES)。

    在支持 FIPS 的平台上,可以为 algorithm 指定一种 FIPS 算法。

    如果不指定 algorithm,将使用缺省的 AES。如果启动数据库服务器时使用了 -fips 服务器选项,则将使用 AES_FIPS 作为缺省值。

返回值

LONG BINARY

注释

此函数返回的 LONG BINARY 值的长度至多比输入 string-expression 的长度长 31 个字节。该函数的返回值不是人工可读的。可以使用 DECRYPT 函数对用 ENCRYPT 函数加密的 string-expression 进行解密。要成功解密 string-expression,您必须使用对数据进行加密时所使用的加密密钥和算法。如果指定的加密密钥不正确,将会生成错误。丢失密钥将导致数据无法访问,而无法访问的数据是无法进行恢复的。

如果您在表中存储加密后的值,则列类型应设为 BINARY 或 LONG BINARY 以避免对该数据执行字符集转换操作。

注意

并非所有平台上都可以使用 FIPS。有关受支持的平台的列表,请参见 [external link] http://www.sybase.com/detail?id=1062623

另请参见
标准和兼容性
  • SQL/2003   核心 SQL 之外的 SQL 基础特性。

示例

以下触发器对 user_info 表的 user_pwd 列加密。此列包含用户口令,每当更改口令值时便会触发触发器。

CREATE TRIGGER encrypt_updated_pwd
BEFORE UPDATE OF user_pwd
ON user_info
REFERENCING NEW AS new_pwd
FOR EACH ROW
BEGIN
    SET new_pwd.user_pwd=ENCRYPT( new_pwd.user_pwd, '8U3dkA' );
END;