Funciones escalares DECRYPT_BINARY, DECRYPT_BIT, DECRYPT_CHAR y DECRYPT_DB

Las funciones de descifrado devuelven un valor que es el resultado de descifrar los datos cifrados. Las funciones de descifrados pueden descifrar solo los valores que están cifrados mediante la función ENCRYPT_TDES.

Leer diagrama de sintaxisOmitir el diagrama de sintaxis visualDECRYPT_BINARYDECRYPT_BITDECRYPT_CHARDECRYPT_DB( datos cifrados,cadena de contraseñaDEFAULT,ccsid-constant)

El esquema es SYSIBM.

La contraseña utilizada para el descifrado es el valor de la cadena de contraseña o el valor de CONTRASEÑA DE ENCRYPTION, que se asigna mediante la instrucción SET ENCRYPTION PASSWORD.

datos cifrados
Una expresión que devuelve un valor de datos completo y cifrado de un tipo de datos CHAR FOR BIT DATA, VARCHAR FOR BIT DATA, BINARY o VARBINARY. La cadena de datos debe haber sido cifrada utilizando la función ENCRYPT_TDES. El atributo de longitud debe ser mayor o igual que 0 (cero) y menor o igual que 32672.
cadena de contraseña
Expresión que devuelve un valor CHAR o VARCHAR con al menos 6 bytes y no más de 127 bytes. Esta expresión debe ser la misma contraseña que se utilizó para cifrar los datos o el descifrado dará como resultado un valor diferente al que se cifró originalmente. Para mayor seguridad, la cadena de contraseña debe especificarse utilizando una variable de host en lugar de una constante de cadena. Si el valor del argumento de contraseña es nulo o no se proporciona, los datos se descifrarán utilizando el valor ENCRYPTION PASSWORD, que debe haber sido asignado por la sentencia SET ENCRYPTION PASSWORD.

Para una instrucción SQL estática, se recomienda que la contraseña se especifique con una variable de host en lugar de con una constante de cadena.

DEFAULT
Los datos se descifran utilizando el valor ENCRYPTION PASSWORD, que debe haber sido asignado por la sentencia SET ENCRYPTION PASSWORD.
ccsid-constant
Una constante entera que especifica el CCSID en el que la función de descifrado debe devolver los datos. Si se especifica DECRYPT_BIT o DECRYPT_BINARY, no se debe especificar ccsid-constant. El valor por omisión es
  • La opción de enlace ENCODING del plan o paquete o la opción SCHEMA DE ENCODING DE APLICACIÓN de la instrucción CREATE PROCEDURE o ALTER PROCEDURE para procedimientos SQL nativos que contienen instrucciones SQL estáticas
  • El valor del registro especial APPLICATION ENCODING para sentencias SQL dinámicas
El tipo de datos del resultado de la función viene determinado por la función especificada y el tipo de datos del primer argumento, como se muestra en la siguiente tabla. Si no se admite la conversión del tipo real de los datos cifrados al resultado de la función, se devuelve una advertencia o un error.
Tabla 1. Resultado de la función de descifrado
Función Tipo del primer argumento Tipo real de datos cifrados Resultado
DECRYPT_BINARY PARA DATOS BIT 1, BINARIOS, VARBINARIOS Cualquier cadena (excepto para LOB) VARBINARY
DECRYPT_BIT PARA DATOS BINARIOS, BINARIOS, VARBINARIOS CHAR, VARCHAR VARCHAR FOR BIT DATA
DECRYPT_BIT PARA DATOS BINARIOS, BINARIOS, VARBINARIOS GRÁFICO, VARGRÁFICO ( UTF16 ) Advertencia o error

Si se devuelve una advertencia, el resultado es VARCHAR FOR BIT DATA

DECRYPT_BIT PARA DATOS BINARIOS, BINARIOS, VARBINARIOS GRÁFICO, VARGRÁFICO (no UTF16 ) Advertencia o error

Si se devuelve una advertencia, el resultado es VARCHAR FOR BIT DATA

DECRYPT_BIT PARA DATOS BINARIOS, BINARIOS, VARBINARIOS BINARY, VARBINARY Advertencia o error

Si se devuelve una advertencia, el resultado es VARCHAR FOR BIT DATA

DECRYPT_CHAR PARA DATOS BINARIOS, BINARIOS, VARBINARIOS CHAR, VARCHAR VARCHAR(3)
DECRYPT_CHAR PARA DATOS BINARIOS, BINARIOS, VARBINARIOS GRÁFICO, VARGRÁFICO ( UTF16 ) VARCHAR(3)
DECRYPT_CHAR PARA DATOS BINARIOS, BINARIOS, VARBINARIOS GRÁFICO, VARGRÁFICO (no UTF16 ) Advertencia o error

Si se devuelve una advertencia, el resultado es VARCHAR(3)

DECRYPT_CHAR PARA DATOS BINARIOS, BINARIOS, VARBINARIOS BINARY, VARBINARY Advertencia o error

Si se devuelve una advertencia, el resultado es VARCHAR(3)

DECRYPT_DB PARA DATOS BINARIOS, BINARIOS, VARBINARIOS CHAR, VARCHAR, GRAPHIC, VARGRAPHIC VARGRAPHIC
DECRYPT_DB PARA DATOS BINARIOS, BINARIOS, VARBINARIOS BINARY, VARBINARY Advertencia o error

Si se devuelve una advertencia, el resultado es VARGRAPHIC

Notas:
  1. PARA DATOS DE BIT significa CHAR o VARCHAR PARA DATOS DE BIT

Si datos-cifrados incluía una sugerencia, la función no la devolverá. El atributo de longitud del resultado es el atributo de longitud de los datos cifrados menos 8 bytes. La longitud real del valor devuelto por la función coincidirá con la longitud de la cadena original que se cifró. Si datos-cifrados incluye bytes más allá de la serie cifrada, la función no los devolverá.

Administración de datos cifrados : Las funciones de descifrado solo pueden descifrar datos que se cifraron utilizando el algoritmo de cifrado Triple DES. Por lo tanto, las columnas con datos cifrados solo pueden utilizarse después de la replicación si se cifraron utilizando el algoritmo de cifrado Triple DES.

Si los datos se descifran utilizando un CCSID diferente al valor cifrado originalmente, es posible que se produzca una expansión al convertir el valor descifrado a este CCSID. En tales situaciones, el valor de los datos cifrados debe convertirse primero en una cadena VARCHAR con un mayor número de bytes antes de realizar las funciones de descifrado.

El resultado puede ser nulo; si el primer argumento es nulo, el resultado es el valor nulo.

Para obtener información adicional sobre el uso de las funciones de descifrado, consulte la función escalar ENCRYPT_TDES o ENCRYPT y la función escalar GETHINT.

Protección con contraseña : para evitar el acceso involuntario a la contraseña de cifrado, no especifique la cadena de contraseña como una constante de cadena en la instrucción de origen. En su lugar, utilice el registro especial CONTRASEÑA DE ENCRIPTACIÓN o especifique la contraseña utilizando una variable de host.

Ejemplo 1 : Establezca el valor de CONTRASEÑA DE ENCRIPTACIÓN en « Ben123 » y utilícela como contraseña para insertar un número de la seguridad social descifrado en la tabla. Descifre el valor del número de la seguridad social añadido, utilizando el valor de CONTRASEÑA DE ENCRIPTACIÓN.
   SET ENCRYPTION PASSWORD ='Ben123';
   INSERT INTO EMP(SSN) VALUES ENCRYPT_TDES('289-46-8832');
   SELECT DECRYPT_CHAR(SSN) FROM EMP;

Este ejemplo devuelve el valor «289-46-8832».

Ejemplo 2 : Descifrar el número de la seguridad social que se inserta en la tabla. En lugar de utilizar el valor ENCRYPTION PASSWORD, especifique explícitamente « Ben123 » como contraseña de cifrado.
   SELECT DECRYPT_CHAR(SSN,'Ben123') FROM EMP;

Este ejemplo devuelve el valor «289-46-8832».

Ejemplo 3 : Inserte un número de la seguridad social descifrado en la tabla, especificando explícitamente « Ben123 » como contraseña. Descifrar los datos y convertirlos a CCSID 1208.
   SET ENCRYPTION PASSWORD ='Ben123';
   INSERT INTO EMP(SSN) VALUES ENCRYPT_TDES('289-46-8832');
   SELECT DECRYPT_CHAR(SSN) FROM EMP;
Cuando se especifica un CCSID, puede ser necesario convertir explícitamente los datos a un valor más largo para garantizar que haya espacio para la expansión cuando los datos se descifren. El siguiente ejemplo ilustra la técnica:
   SELECT DECRYPT_CHAR(CAST(SSN AS VARCHAR(57)),
                        'Ben123',1208) 
                  FROM EMP;

En el primer caso, cuando los datos no se convierten a un valor más largo, el resultado es un valor VARCHAR(11). En el segundo caso, para permitir la expansión, SSN se convierte en VARCHAR(57) (11 * 3 + 24). Al asignar un valor más largo a los datos, se permite una expansión tres veces mayor en el resultado normal de VARCHAR(11). La expansión por tres se asocia a menudo con el peor caso de conversión de ASCII o EBCDIC a Unicode UTF-8. En ambos casos de este ejemplo, el resultado es el valor VARCHAR(11) '289-46-8832'.