Está en la página 1de 4

12.9.2.

Funciones de cifrado
Las funciones en esta seccin cifran y descifran valores. Si quiere almacenar resultados de una funcin de cifrado que puede contaner valores arbitrarios de bytes, use una columna BLOB en lugar de CHAR o VARCHAR para evitar problemas potenciales con eliminacin de espacios finales que pueden cambiar los valores de datos.
AES_ENCRYPT(str,key_str) , AES_DECRYPT(crypt_str,key_str)

Estas funciones permiten el cifrado y descifrado de datos usando el algoritmo oficial AES (Advanced Encryption Standard), conocido anteriormente como "Rijndael." Se usa un cifrado con una clave de 128-bit, pero puede ampliarlo hasta 256 bits modificando las fuentes. Elegimos 128 porque es mucho ms rpido y de momento es suficientemente seguro. Los argumentos de entrada pueden ser de cualquier longitud. Si algn argumento es NULL, el resultado de esta funcin tambin es NULL. Debido a que AES es un algoritmo a nivel de bloques, se usa relleno para cadenas de longitud impar y as la longitud de la cadena resultante puede calcularse como 16 *
(trunc(string_length / 16) + 1).

Si AES_DECRYPT() detecata datos invlidos o relleno incorrecto, retorna NULL. Sin embargo, es posible paraAES_DECRYPT() retornar un valor no NULL (posiblemente basura) si los datos de entrada o la clave son invlidos. Puede usar la funcin AES para almacenar datos de forma cifrada modificando sus consultas:
INSERT INTO t VALUES (1,AES_ENCRYPT('text','password'));

Puede obtener incluso mejor seguridad si no transfiere la clave a travs de la conexin para cada consulta, que puede hacerse almacenando la clave en una variable del servidor al hacer la conexin. Por ejemplo:
SELECT @password:='my password'; INSERT INTO t VALUES (1,AES_ENCRYPT('text',@password)); AES_ENCRYPT() y AES_DECRYPT() pueden considerarse las funciones de cifrado

criptogrficamente ms seguras disponibles en MySQL.


DECODE(crypt_str,pass_str)

Descifra

la

cadena

cifrada crypt_str usando pass_str como

contrasea. crypt_str debe ser una cadena retornada de ENCODE().


ENCODE(str,pass_str)

Cifra str usando pass_str como use DECODE().

contrasea.

Para

descifrar

el

resultado,

El resultado es una cadena binaria de la misma longitud que str. Si quiere guardarlo en una columna, use una columna de tipo BLOB .
DES_DECRYPT(crypt_str[,key_str])

Descifra una cadena cifrada con DES_ENCRYPT(). En caso de error, esta funcin retorna NULL. Tenga en cuenta que esta funcin funciona slo si MySQL se configura con soporte SSL. Consulte Seccin 5.7.7, Usar conexiones seguras. Si no se da argumento key_str, DES_DECRYPT() examina el primer byte de la cadena cifrada para determinar el nmero de clave DES que se us para cifrar la cadena original, y luego lee la clave del fichero clave DES para descifrar el mensaje. Para que esto funcione, el usuario debe tener el privilegio SUPER. El fichero clave puede especificarse con la opcin del servidor --des-key-file . Si le pasa a esta funcin el argumento key_str , esta cadena se usa como la clave para descifrar el mensaje. Si el argumento crypt_str no parece una cadena cifrada, MySQL retorna crypt_str.
DES_ENCRYPT(str[,(key_num|key_str)])

Cifra la cadena con la clave dada usando el algoritmo triple-DES. En caso de error, retorna NULL. Tenga en cuenta que esta funcin funciona slo si MySQL se configura con soporte SSL. Consulte Seccin 5.7.7, Usar conexiones seguras. La clave de cifrado a usar se elige basada en el segundo argumento de DES_ENCRYPT(), si se ha dado uno:
Argumento Descripcin

Sin argumento Se usa la primera clave del fichero clave DES. key_num key_str El nmero de clave dado (0-9) del fichero clave DES se usa. Se usa la cadena clave dada para cifrar str.

El fichero clave puede especificarse con la opcin de servidor --des-key-file . La cadena retornada es una cadena binaria donde el primer carcter es CHAR(128 |
key_num).

Se aade 128 para hacer ms sencillo reconocer una clave cifrada. Si usa una cadena clave, key_num es 127. La longitud de la cadena para el resultado es new_len = orig_len +
(orig_len % 8))+1. (8-

Cada lnea en el fichero clave DES tiene el siguiente formato:


key_num des_key_str

Cada key_num debe ser un nmero en el rango de 0 a 9. Las lneas en el fichero pueden estar en cualquier orden. des_key_str es la cadena que se usa para cifrar el mensaje. Entre el nmero y la clave debe haber un espacio como mnimo. La primera clave es la clave usada por defecto si no especifica ningn argumento clave para DES_ENCRYPT() Puede decir a MySQL que lea un nuevo valor de clave del fichero clave con el comando FLUSH DES_KEY_FILE. Esto necesita el privilegio RELOAD . Un beneficio de tener un conjunto de claves por defecto es que da a las aplicaciones una forma de chequear la existencia de valores de columna cifrados, sin dar al usuario final el derecho de descifrarlos.
mysql> SELECT customer_address FROM customer_table > WHERE crypted_credit_card = DES_ENCRYPT('credit_card_number'); ENCRYPT(str[,salt])

Cifra str usando la llamada de sistema Unix crypt() . El argumento salt debe ser una cadena con al menos dos caracteres. Si no se da argumento salt , se usa un valor aleatorio.
mysql> SELECT ENCRYPT('hello'); -> 'VxuFAJXVARROc' ENCRYPT() ignora todo excepto los primeros ochos caracteres de str, al menos en

algunos sistemas. Este comportamiento viene determinado por la implementacin de la llamada de sistema crypt() subyacente. Si crypt() no est disponible en su sistema (como pasa en

Windows), ENCRYPT() siempre retorna NULL. Debido a esto, recomandamos que use MD5() o SHA1() en su lugar, y que estas dos funciones existen en todas las plataformas.
MD5(str)

Calcula una checksum MD5 de 128-bit para la cadena. El valor se retorna como una cadena binaria de dgitos 32 hex ,o NULL si el argumento era NULL. El valor de retorno puede usarse como clave hash, por ejemplo.
mysql> SELECT MD5('testing'); -> 'ae2b1fca515949e5d54fb22b8ed95575'

Este es el "RSA Data Security, Inc. MD5 Message-Digest Algorithm." Si quiere convertir el valor a maysculas, consulte la descripcin de conversiones de cadenas binarias dada en la entrada del operador BINARY en Seccin 12.8, Funciones y operadores de cast.
OLD_PASSWORD(str)

OLD_PASSWORD() se aadi en MySQL 4.1,cuando se cambin la implementacin

de PASSWORD() para mejorar la seguridad. OLD_PASSWORD() retorna el valor de la implementacin pre-4.1 de PASSWORD(), y est hecha para permitirle resetear contraseas para cualquier cliente pre-4.1 que necesite conectar a su versin 4.1 o posterior de MySQL server sin bloquearlo. Consulte Seccin 5.6.9, Hashing de contraseas en MySQL 4.1.
PASSWORD(str)

Calcula y retorna una cadena de contrasea de la contrasea en texto plano str, o NULL si el argumento eraNULL. Esta es la funcin que se usa para cifrar contraseas MySQL para almacenar en la columna Password de la tabla user .
mysql> SELECT PASSWORD('badpwd'); -> '7f84554057dd964b'

El cifrado de PASSWORD() es de un sentido (no reversible).


PASSWORD() no realiza el cifrado de contrasea de la misma forma que se cifran las

contraseas Unix. ConsulteENCRYPT(). Nota: La funcin PASSWORD() se usa por el sistema de autenticacin en MySQL Server; no no debe usarlo en su propias aplicaciones. Para ese propsito, use MD5() o SHA1() en su lugar. Consulte RFC 2195 para ms informacin acerca de tratar contraseas y autenticacin de forma segura en su aplicacin.
SHA1(str), SHA(str)

Calcula una checksum SHA1 de 160-bit para la cadena, como se describe en RFC 3174 (Secure Hash Algorithm). El valor se retorna como cadnea de 40 dtigos hexadecimales, o NULL si el argumento era NULL. Uno de los usos posibles para esta funcin es una clave hash. Tambin puede usarlo como funcin criptogrficamente segura para almacenar contraseas
mysql> SELECT SHA1('abc'); -> 'a9993e364706816aba3e25717850c26c9cd0d89d' SHA1() puede

considerarse

un

equivalente

criptogrficamente

ms

seguro

que MD5(). SHA() es sinnimo deSHA1().

También podría gustarte