對錶裡的指定已經隨機性加密的列做解密。
注意事項
升級到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函數屬於加密函數,更多加密、解密的相關函數請參見加密函數。