全部產品
Search
文件中心

MaxCompute:ENHANCED_SYM_ENCRYPT

更新時間:Jun 19, 2024

本文為您介紹如何使用ENHANCED_SYM_ENCRYPT函數指定密鑰集進行資料加密。

背景與前提

MaxCompute支援使用ENHANCED_SYM_ENCRYPT函數指定產生的基礎密鑰集或封裝密鑰集對資料進行加密。封裝密鑰集是通過KMS金鑰組產生的密鑰集(KEYSET)再次進行加密,結合Key Management Service做密鑰管理,相比基礎密鑰集會更加安全。

使用ENHANCED_SYM_ENCRYPT函數前需要完成以下操作:

  • 已有通過NEW_KEYSETNEW_WRAPPED_KEYSET函數產生的基礎密鑰集或封裝密鑰集,詳情請參見NEW_KEYSETNEW_WRAPPED_KEYSET

  • 如果使用封裝密鑰集加密資料,需要先使用USE_WRAPPED_KEYSET函數擷取基礎密鑰集,基礎密鑰集作為ENHANCED_SYM_ENCRYPT函數的參數進行資料加密。同時需要有使用封裝密鑰集對應角色的許可權,操作詳情請參見開通KMS並完成配置

命令格式

binary ENHANCED_SYM_ENCRYPT(binary <keyset> , string|binary <plaintext> [,string <additional_data>])

參數說明

  • keyset:必填,使用者密鑰集, 類型為BINARY或者封裝密鑰集的STRUCT類型。

  • plaintext:必填,待加密的STRING或BINARY類型的明文。

  • additional_data: 可選,演算法支援的STRING類型驗證資訊。

傳回值說明

返回BINARY類型的密文。

樣本資料

--建立表
create table mf_user_info(id bigint,
                          name string,
                          gender string,
                          id_card_no string,
                          tel string);
--插入資料
insert overwrite table mf_user_info values(1,"bob","male","0001","13900001234"),
                                       (2,"allen","male","0011","13900001111"),
                                     (3,"kate","female","0111","13900002222"),
                                     (4,"annie","female","1111","13900003333");
--查詢資料
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|
+------------+------+--------+------------+------------+

使用樣本

  • 使用基礎密鑰集對mf_user_info表的id_card_no列加密:

    insert overwrite table mf_user_info
    select id,
        name,
        gender,
           base64(ENHANCED_SYM_ENCRYPT(unhex ('0A1072384D715A414541385044643351534C12580A330A0B4145532D47434D2D323536122026A8FB1126DF4F5B5DD03C180E6919565D7716CBB291815EFB5BBF30F8BEF9AF1801200210011A1072384D715A414541385044643351534C20022A0B68656C6C6F20776F726C64'), id_card_no ))as id_card_no,
          tel
    from mf_user_info;

    查詢加密結果樣本如下:

    select * from mf_user_info;
    
    --返回結果樣本
    +------------+------+--------+------------+-----+
    | id         | name | gender | id_card_no | tel |
    +------------+------+--------+------------+-----+
    | 1          | bob  | male   | nLcdDFdjO2T4aATtirvDMVeBD8oSuu4BfM3t+Y8ny0kwQjJlAQAwkVhYOocPQll8LmdzSwkRf3v2iTow+TAmnQ== | 13900001234 |
    | 2          | allen | male   | nLcdDFdjO2T4aATtirvDMVeBD8oSuu4BfM3t+Y8ny0kwQjJlAQBgj1hYOodIPdnyZ0ijZ9RmT+50xbxXh5cwcg== | 13900001111 |
    | 3          | kate | female | nLcdDFdjO2T4aATtirvDMVeBD8oSuu4BfM3t+Y8ny0kwQjJlAQCwp1hYOoentQgkfUqctPbmX96k9eD018xg9Q== | 13900002222 |
    | 4          | annie | female | nLcdDFdjO2T4aATtirvDMVeBD8oSuu4BfM3t+Y8ny0kwQjJlAQDQqFhYOodexhRmfh6VieEwePZscC4nUVTJXQ== | 13900003333 |
    +------------+------+--------+------------+-----+
  • 使用封裝密鑰集對mf_user_info表的tel列加密:

    1. 產生封裝密鑰集並寫入表中:

      --建立表並把加密後的keyset寫入
      create table mf_keyset_kms (id string,ks binary);
      --生產keyset加密後寫入表
      insert into mf_keyset_kms 
            select '1',
                   NEW_WRAPPED_KEYSET(
                      'acs:kms:cn-hangzhou:1**************7:key/key-hzz****************1t', 
                      'acs:ram::1**************7:role/kms', 
                      'AES-GCM-256', 
                     'description');
      --查詢表
      select id,hex(ks) from mf_keyset_kms;
      
      --返回結果樣本
      +----+-----+
      | id | _c1 |
      +----+-----+
      | 1  | 613256354C576836656A59314D6D59344E7A6B7A624452754D6D3434627A49786443317A655859786358426F4E6A4D78447654524C4632635077766E74554654584579715242583953724167446D2F397131786F57456E6F5474516739633853766242674456773565736674714A4D5435524455382F6F6A2B4E61766D774344494C734B6A416B6B675A42496F5568656F566D38564C4F30506D4778767137646956517453447A5467395147775639533161305A464A6D6A45562B6742722F56386653444D6E424D2B71493779784668303866594E6D336578775744423949726B645A3469784F2B532B476E6750523854524A58326E5768666478347034473468687248684A514D615071332F526C342B67427652773D3D |
      +----+-----+
    2. 使用封裝密鑰集對tel列加密:

      select /*+ MAPJOIN(a) */ 
             id,
             name,
      	   gender,
      	   id_card_no,
             ENHANCED_SYM_ENCRYPT(
                 USE_WRAPPED_KEYSET('acs:kms:cn-hangzhou:1**************7:key/key-hzz****************1t', 
                                    'acs:ram::1**************7:role/kms', 
                                    unhex('613256354C576836656A59314D6D59344E7A6B7A624452754D6D3434627A49786443317A655859786358426F4E6A4D78447654524C4632635077766E74554654584579715242583953724167446D2F397131786F57456E6F5474516739633853766242674456773565736674714A4D5435524455382F6F6A2B4E61766D774344494C734B6A416B6B675A42496F5568656F566D38564C4F30506D4778767137646956517453447A5467395147775639533161305A464A6D6A45562B6742722F56386653444D6E424D2B71493779784668303866594E6D336578775744423949726B645A3469784F2B532B476E6750523854524A58326E5768666478347034473468687248684A514D615071332F526C342B67427652773D3D')
                                   ),
                 tel
             ) as tel 
       FROM mf_user_info;

      返回結果樣本如下:

      +------------+------+--------+------------+------+
      | id         | name | gender | id_card_no | tel  |
      +------------+------+--------+------------+------+
      | 1          | bob  | male   | 0001       | =F1=EEa=13V9=CCsB=90=E7=F3fl=D2=CB=F31=D8=3D=88=B7=F7=0CnG=E3\R=FC)=F2=10=3D2e=01=00=90=86=05=94z;=18=A6j=1CN=E5=9F=AC)=8D=D6=D8=0D=A2Y{kq=EE=F4~=C4=A7=9BS=A1w |
      | 2          | allen | male   | 0011       | =F1=EEa=13V9=CCsB=90=E7=F3fl=D2=CB=F31=D8=3D=88=B7=F7=0CnG=E3\R=FC)=F2=10=3D2e=01=00=20=AA=05=94z;=85=D8=08a=A2]=02d=20=B1=C3=AE=AF=1C{=EB=EA=C4=81=B5A=15=1BR=F7g=9B |
      | 3          | kate | female | 0111       | =F1=EEa=13V9=CCsB=90=E7=F3fl=D2=CB=F31=D8=3D=88=B7=F7=0CnG=E3\R=FC)=F2=10=3D2e=01=00=20=B6=05=94z;[C=12=81=8B<=C1=9D=E2=CF=CE=BC=AE=A7=84=0F[=7CI=B9=B7=9D=DD=89=A8=FD! |
      | 4          | annie | female | 1111       | =F1=EEa=13V9=CCsB=90=E7=F3fl=D2=CB=F31=D8=3D=88=B7=F7=0CnG=E3\R=FC)=F2=10=3D2e=01=00=00=A2=05=94z;E=03A=BC=7C=88=CFJ=14=B9=BD=A1=BF=ED=20=11=A3=A6/+%=0Fe=DD=C7=C8=0A |
      +------------+------+--------+------------+------+