Estos contenidos se han traducido de forma automática para su comodidad, pero Huawei Cloud no garantiza la exactitud de estos. Para consultar los contenidos originales, acceda a la versión en inglés.
Centro de ayuda/ Data Warehouse Service/ Prácticas recomendadas / Desarrollo de datos/ Encriptación y desencriptación de columnas de datos
Actualización más reciente 2026-09-29 GMT+08:00

Encriptación y desencriptación de columnas de datos

La encriptación de datos se utiliza ampliamente en varios sistemas de información como una tecnología para evitar el acceso no autorizado y la fuga de datos de manera efectiva. Como núcleo de un sistema de información, el almacén de datos de DWS también proporciona encriptación y encriptación transparentes mediante funciones SQL. Esta sección describe la encriptación de la función SQL.

Actualmente, DWS no admite la desencriptación de datos encriptados en bases de datos Oracle, Teradata y MySQL. La encriptación y la desencriptación de las bases de datos Oracle, Teradata y MySQL son diferentes de las de DWS. DWS solo puede desencriptar datos no encriptados migrados desde bases de datos Oracle, Teradata y MySQL.

Antecedentes

  • Funciones hash

    La función hash también se denomina algoritmo de digestión. Mapea los datos de entrada de longitud arbitraria a una salida de longitud fija. Por ejemplo, Hash(data)=result. Este proceso es irreversible. Es decir, la función hash no tiene una función inversa y no se pueden obtener datos del resultado. En escenarios en los que no se deben almacenar contraseñas en texto plano (las contraseñas son sensibles) o conocidas por los administradores del sistema, se deben utilizar algoritmos hash para almacenar valores hash unidireccionales de contraseñas.

    En el uso real, se agregan valores de sal e iteraciones para evitar que contraseñas idénticas generen los mismos valores hash, previniendo así los ataques de tablas arcoíris.

  • Algoritmos de encriptación simétricos

    Los algoritmos de encriptación simétricos utilizan la misma clave para encriptar y desencriptar datos. Existen dos subcategorías de algoritmos de encriptación simétricos: cifrados por bloques y cifrados por flujo.

    Los cifrados por bloques dividen el texto plano en grupos de bits de longitud fija conocidos como bloques y cada bloque se encripta como una unidad. Y si no hay suficientes datos para llenar completamente un bloque, se utiliza un "relleno" para garantizar que los bloques cumplan con los requisitos de longitud fija. Debido al relleno, la longitud del texto cifrado obtenido mediante cifrados por bloques es mayor que la del texto plano.

    En los cifrados por flujo, las partes de encriptación y desencriptación utilizan el mismo flujo de datos encriptados seudoaleatorios como claves, y los datos en texto plano se encriptan secuencialmente mediante dichas claves. En la práctica, los datos se cifran bit a bit mediante una operación XOR. Los cifrados por flujo no necesitan relleno. Por lo tanto, la longitud del texto cifrado obtenido es igual a la longitud del texto plano.

    Figura 1 Algoritmos de encriptación simétricos

Detalles técnicos

DWS proporciona funciones hash y algoritmos criptográficos simétricos para encriptar y desencriptar columnas. Las funciones hash admiten sha256, sha384, sha512 y SM3. Los algoritmos criptográficos simétricos admiten AES128, AES192, AES256 y SM4.

  • Funciones hash
    • md5(string)

      Utilice MD5 para encriptar cadenas y devolver un valor hexadecimal. MD5 is insecure and is not recommended.

    • gs_hash(hashstr, hashmethod)

      Obtiene la cadena de resumen de una cadena hashstr en función del algoritmo especificado por hashmethod. hashmethod puede ser sha256, sha384, sha512 o sm3.

  • Algoritmos de encriptación simétricos
    • gs_encrypt(encryptstr, keystr, cryptotype, cryptomode, hashmethod)

      Encripta una cadena encryptstr mediante la clave keystr en función del algoritmo de encriptación especificado por cryptotype y cryptomode y el algoritmo HMAC especificado por hashmethod, y devuelve la cadena encriptada.

    • gs_decrypt(decryptstr, keystr, cryptotype, cryptomode, hashmethod)

      Desencripta una cadena decryptstr mediante la clave keystr en función del algoritmo de encriptación especificado por cryptotype y cryptomode y el algoritmo HMAC especificado por hashmethod, y devuelve la cadena desencriptada. El keystr utilizado para la desencriptación debe coincidir con el utilizado para la encriptación.

    • gs_encrypt_aes128(encryptstr, keystr)

      Encripta cadenas encryptstr usando keystr como clave y devuelve cadenas encriptadas. La longitud de keystr oscila entre 1 y 16 bytes.

    • gs_decrypt_aes128(decryptstr, keystr)

      Desencripta una cadena decryptstr mediante la clave keystr y devuelve la cadena desencriptada. El keystr utilizado para la desencriptación debe coincidir con el utilizado para la encriptación. keystr es obligatorio.

    Para obtener más información sobre las funciones, consulte Uso de funciones para encriptación y desencriptación.

Ejemplos

  1. Conéctese a la base de datos.

    Para obtener más información, consulte Uso de la CLI para conectarse a un clúster de DWS.

  2. Cree la tabla student con las columnas id, name y score. A continuación, utilice funciones hash para encriptar y guardar los nombres, y utilice algoritmos criptográficos simétricos para guardar los puntajes.

    1
    2
    3
    4
    5
    CREATE TABLE student (id int, name text, score text, subject text);
    
    INSERT INTO student VALUES (1, gs_hash('alice', 'sha256'), gs_encrypt('95', '12345', 'aes128', 'cbc', 'sha256'),gs_encrypt_aes128('math', '1234'));
    INSERT INTO student VALUES (2, gs_hash('bob', 'sha256'), gs_encrypt('92', '12345', 'aes128', 'cbc', 'sha256'),gs_encrypt_aes128('english', '1234'));
    INSERT INTO student VALUES (3, gs_hash('peter', 'sha256'), gs_encrypt('98', '12345', 'aes128', 'cbc', 'sha256'),gs_encrypt_aes128('science', '1234'));
    

  3. Consulte la tabla student sin usar claves. El resultado de la consulta muestra que los datos encriptados en las columnas name y score no se pueden ver, incluso si tiene el permiso SELECT.

     1
     2
     3
     4
     5
     6
     7
     8
     9
    10
    11
    12
    SELECT * FROM student;
     id |                               name                               |                                                          score                                                           |
                                    subject
    ----+------------------------------------------------------------------+--------------------------------------------------------------------------------------------------------------------------+-----------
    -----------------------------------------------------------------------------------
      1 | 2bd806c97f0e00af1a1fc3328fa763a9269723c8db8fac4f93af71db186d6e90 | AAAAAAAAAABAuUC3VQ+MvPCDAaTUySl1e2gGLr4/ATdCUjTEvova3cb/Ba3ZKqIn1yNVGEFBvJnTq/3sLF4//Gm8qG7AyfNbbqdW3aYErLVpbE/QWFX9Ig== | aFEWQR2gkj
    iu6sfsAad+dHzfFDHePZ6xd44zyekh+qVFlh9FODZ0DoaFAJXctwUsiqaiitTxW8cCSEaNjS/E7Ke1ruY=
      2 | 81b637d8fcd2c6da6359e6963113a1170de795e4b725b84d1e0b4cfd9ec58ce9 | AAAAAAAAAABAuUC3VQ+MvPCDAaTUySl1taXxAoDqE793hgyCJvC0ESdAX5Mtgdq2LXI1f5ZxraQ73WIJVtIBX8oe3gTDxoXGlHbHht4kzM4U8dOwr5rjgg== | aFEWQR2gkj
    iu6sfsAad+dM8tPTDo/Pds6ZmqdmjGiKxf39+Wzx5NoQ6c8FrzihnRzgc0fycWSu5YGWNOKYWhRsE84Ac=
      3 | 026ad9b14a7453b7488daa0c6acbc258b1506f52c441c7c465474c1a564394ff | AAAAAAAAAACnyusORPeApqMUgh56ucQu3uso/Llw5MbPFMkOXuspEzhhnc9vErwOFe6cuGtx8muEyHCX7V5yXs+8FxhNh3n5L3419LDWJJLY2O4merHpSg== | zomphRfHV4
    H32hTtgkio1PyrobVO8N+hN7kAKwtygKP2E7Aaf1vsjmtLHcL88jyeJNe1lxe0fAvodzPJAxAuV3UJN4M=
    (3 rows)
    

  4. Consulte la tabla student usando claves. El resultado de la consulta muestra que los datos se desencriptan mediante la función gs_decrypt (correspondiente a gs_encrypt) y se pueden ver.

    1
    2
    3
    4
    5
    6
    7
    SELECT id, gs_decrypt(score, '12345', 'aes128', 'cbc', 'sha256'),gs_decrypt_aes128(subject, '1234') FROM student;
     id | gs_decrypt | gs_decrypt_aes128
    ----+------------+-------------------
      1 | 95         | math
      2 | 92         | english
      3 | 98         | science
    (3 rows)