全部產品
Search
文件中心

MaxCompute:SYM_DECRYPT

更新時間:Jun 19, 2024

對錶裡的指定已經隨機性加密的列做解密。

注意事項

升級到MaxCompute 2.0後,產品擴充了部分函數。如果您用到的函數涉及新資料類型(TINYINT、SMALLINT、INT、FLOAT、VARCHAR、TIMESTAMP或BINARY),在使用擴充函數時,需要執行如下語句開啟新資料類型開關:

  • Session層級:如果使用新資料類型,您需要在SQL語句前加上set odps.sql.type.system.odps2=true;,並與SQL語句一起提交執行。

  • Project層級:Project Owner可根據需要對Project進行設定,等待10~15分鐘後才會生效。命令如下。

    setproject odps.sql.type.system.odps2=true;

    setproject的詳細說明請參見專案空間操作。關於開啟Project層級資料類型的注意事項,請參見資料類型版本說明

命令格式

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函數屬於加密函數,更多加密、解密的相關函數請參見加密函數