对表里的指定已经随机性加密的列做解密。
注意事项
升级到MaxCompute 2.0后,产品扩展了部分函数。如果您用到的函数涉及新数据类型(TINYINT、SMALLINT、INT、FLOAT、VARCHAR、TIMESTAMP或BINARY),在使用扩展函数时,需要执行如下语句开启新数据类型开关:
命令格式
binary sym_decrypt(binary <value_to_decrypt>,
binary <key>
[,string <encryption_method> ,
[ string <additional_authenticated_data> ]
]
)
参数说明
value_to_decrypt:必填。待解密数据。目前只支持对BINARY类型的数据进行解密。
key:必填。解密使用的密钥。支持的数据类型为BINARY,长度为256bits。
encryption_method:可选。数据用指定模式加密,解密时需要选择同样的模式进行解密。
additional_authenticated_data:可选。附加身份验证数据AAD,可以用来验证数据的真实性和完整性,数据在加密时用了AAD,解密时就需要输入AAD。
返回值说明
返回BINARY类型的明文,若有需要您可以自行通过CAST将BINARY类型转换为STRING类型。
示例
以下示例以SYM_ENCRYPT中加密后的表为样例数据,为您演示如何解密。
示例1:解密明文密钥加密数据。
基于示例1:基于明文密钥加密,对表
mf_user_info
中的列进行解密。命令如下:使用AEAD加密算法进行解密。
--对id_card_no解密 insert overwrite table mf_user_info select id, name, gender, cast(sym_decrypt(unbase64(id_card_no), cast('b75585cf321cdcad42451690cdb7bfc4' as binary) ) as string) as id_card_no, tel from mf_user_info; --查询解密后的明文数据 select * from mf_user_info;
返回结果:
+------------+------+--------+------------+-------------+ | id | name | gender | id_card_no | tel | +------------+------+--------+------------+-------------+ | 1 | bob | male | 0001 | 13900001234 | | 2 | allen| male | 0011 | 13900001111 | | 3 | kate | female | 0111 | 13900002222 | | 4 | annie| female | 1111 | 13900003333 | +------------+------+--------+------------+-------------+
使用AAD加密算法进行解密。
--对id_card_no解密 insert overwrite table mf_user_info select id, name, gender, sym_decrypt(unbase64(id_card_no), cast('b75585cf321cdcad42451690cdb7bfc4' as binary), 'AES-GCM-256', 'test' )as id_card_no, tel from mf_user_info; --查询解密后的明文数据 select * from mf_user_info;
返回结果:
+------------+------+--------+------------+------------+ | id | name | gender | id_card_no | tel | +------------+------+--------+------------+------------+ | 1 | bob | male | 0001 | 13900001234| | 2 | allen| male | 0011 | 13900001111| | 3 | kate | female | 0111 | 13900002222| | 4 | annie| female | 1111 | 13900003333| +------------+------+--------+------------+------------+
示例2:解密密钥表加密数据。
基于示例2:基于密钥表加密,对表
mf_user_info
中的列进行解密。命令如下:--对目标表的列进行解密 insert overwrite table mf_user_info select /*+mapjoin(b)*/ a.id, a.name, a.gender, cast(sym_decrypt(unbase64(a.id_card_no), b.key) as string) as id_card_no, a.tel from mf_user_info as a join mf_id_key as b on a.id>=b.id; --查询解密后的数据 select * from mf_user_info;
返回结果:
+------------+------+--------+------------+-------------+ | id | name | gender | id_card_no | tel | +------------+------+--------+------------+-------------+ | 1 | bob | male | 0001 | 13900001234 | | 2 | allen| male | 0011 | 13900001111 | | 3 | kate | female | 0111 | 13900002222 | | 4 | annie| female | 1111 | 13900003333 | +------------+------+--------+------------+-------------+
相关函数
SYM_DECRYPT函数属于加密函数,更多加密、解密的相关函数请参见加密函数。