Las funciones en esta sección encriptan y desencriptan valores.
        Si quiere almacenar resultados de una función de encriptación
        que puede contaner valores arbitrarios de bytes, use una columna
        BLOB en lugar de CHAR o
        VARCHAR para evitar problemas potenciales con
        eliminación de espacios finales que pueden cambiar los valores
        de datos.
      
            AES_ENCRYPT(
            ,
            str,key_str)AES_DECRYPT(
          crypt_str,key_str)
Estas funciones permiten encriptación y desencriptación de datos usando el algoritmo oficial AES (Advanced Encryption Standard), conocido anteriormente como "Rijndael." Se usa una encriptación con una clave de 128-bit , pero puede ampliarlo hasta 256 bits modificando las fuentes. Elegimos 128 porque es mucho más rápido y de momento es suficientemente seguro.
            Los argumentos de entrada pueden ser de cualquier longitud.
            Si algún argumento es NULL, el resultado
            de esta función también 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
            inválidos o relleno incorrecto, retorna
            NULL. Sin embargo, es posible para
            AES_DECRYPT() retornar un valor no
            NULL (posiblemente basura) si los datos
            de entrada o la clave son inválidos.
          
Puede usar la función AES para almacenar datos de forma encriptada modificando sus consultas:
INSERT INTO t VALUES (1,AES_ENCRYPT('text','password'));
Puede obtener incluso mejor seguridad si no transfiere la clave a través de la conexión para cada consulta, que puede hacerse almacenando la clave en una variable del servidor al hacer la conexión. 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 encriptación criptográficamente más seguras
            disponibles en MySQL.
          
            DECODE(
          crypt_str,pass_str)
            Desencripta la cadena encriptada
            crypt_str usando
            pass_str como contraseña.
            crypt_str debe ser una cadena
            retornada de ENCODE().
          
            ENCODE(
          str,pass_str)
            Encripta str usando
            pass_str como contraseña. Para
            desencriptar el resultado, use DECODE().
          
            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])
            Desencripta una cadena encriptada con
            DES_ENCRYPT(). En caso de error, esta
            función retorna NULL.
          
Tenga en cuenta que esta función funciona sólo si MySQL se configura con soporte SSL. Consulte Sección 5.7.7, “Usar conexiones seguras”.
            Si no se da argumento key_str,
            DES_DECRYPT() examina el primer byte de
            la cadena encriptada para determinar el número de clave DES
            que se usó para encriptar la cadena original, y luego lee
            la clave del fichero clave DES para desencriptar el mensaje.
            Para que esto funcione, el usuario debe tener el privilegio
            SUPER. El fichero clave puede
            especificarse con la opción del servidor
            --des-key-file .
          
            Si le pasa a esta función el argumento
            key_str , esta cadena se usa como
            la clave para desencriptar el mensaje.
          
            Si el argumento crypt_str no
            parece una cadena encriptada, MySQL retorna
            crypt_str.
          
            DES_ENCRYPT(
          str[,(key_num|key_str)])
            Encriptas la cadena con la clave dada usando el algoritmo
            triple-DES. En caso de error, retorna
            NULL.
          
Tenga en cuenta que esta función funciona sólo si MySQL se configura con soporte SSL. Consulte Sección 5.7.7, “Usar conexiones seguras”.
            La clave de encriptación a usar se elige basada en el
            segundo argumento de DES_ENCRYPT(), si se
            ha dado uno:
          
| Argumento | Descripción | 
| Sin argumento | Se usa la primera clave del fichero clave DES. | 
| key_num | El número de clave dado (0-9) del fichero clave DES se usa. | 
| key_str | Se usa la cadena clave dada para encriptar str. | 
            El fichero clave puede especificarse con la opción de
            servidor --des-key-file .
          
            La cadena retornada es una cadena binaria donde el primer
            carácter es CHAR(128 | key_num).
          
            Se añade 128 para hacer más sencillo reconocer una clave
            encriptada. Si usa una cadena clave,
            key_num es 127.
          
            La longitud de la cadena para el resultado es
            new_len =
            orig_len +
            (8-(orig_len % 8))+1
Cada línea en el fichero clave DES tiene el siguiente formato:
key_numdes_key_str
            Cada key_num debe ser un número
            en el rango de 0 a 9.
            Las líneas en el fichero pueden estar en cualquier orden.
            des_key_str es la cadena que se
            usa para encriptar el mensaje. Entre el número y la clave
            debe haber un espacio como mínimo. La primera clave es la
            clave usada por defecto si no especifica ningún 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 encriptados, sin dar al usuario final el derecho de desencritparlos.
mysql> SELECT customer_address FROM customer_table 
     > WHERE crypted_credit_card = DES_ENCRYPT('credit_card_number');
            ENCRYPT(
          str[,salt])
            Encripta 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 implementación 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 dígitos 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 mayúsculas, consulte la
            descripción de conversiones de cadenas binarias dada en la
            entrada del operador BINARY en
            Sección 12.8, “Funciones y operadores de cast”.
          
            OLD_PASSWORD(
          str)
            OLD_PASSWORD() se añadió en MySQL
            4.1,cuando se cambión la implementación de
            PASSWORD() para mejorar la seguridad.
            OLD_PASSWORD() retorna el valor de la
            implementación pre-4.1 de PASSWORD(), y
            está hecha para permitirle resetear contraseñas para
            cualquier cliente pre-4.1 que necesite conectar a su
            versión 4.1 o posterior de MySQL server sin bloquearlo.
            Consulte Sección 5.6.9, “Hashing de contraseñas en MySQL 4.1”.
          
            PASSWORD(
          str)
            Calcula y retorna una cadena de contraseña de la
            contraseña en texto plano str, o
            NULL si el argumento era
            NULL. Esta es la función que se usa para
            encriptar contraseñas MySQL para almacenar en la columna
            Password de la tabla
            user .
          
mysql> SELECT PASSWORD('badpwd');
        -> '7f84554057dd964b'
            
            La encriptación de PASSWORD() es de un
            sentido (no reversible).
          
            PASSWORD() no realiza encriptación de
            contraseña de la misma forma que se encriptan las
            contraseñas Unix. Consulte ENCRYPT().
          
            Nota: La función
            PASSWORD() se usa por el sistema de
            autenticación en MySQL Server; no no
            debe usarlo en su propias aplicaciones. Para ese propósito,
            use MD5() o SHA1() en
            su lugar. Consulte RFC 2195 para más información acerca de
            tratar contraseñas y autenticación de forma segura en su
            aplicación.
          
            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 dítigos hexadecimales, o
            NULL si el argumento era
            NULL. Uno de los usos posibles para esta
            función es una clave hash. También puede usarlo como
            función criptográficamente segura para almacenar
            contraseñas
          
mysql> SELECT SHA1('abc');
        -> 'a9993e364706816aba3e25717850c26c9cd0d89d'
            SHA1() puede considerarse un equivalente
            criptográficamente más seguro que
            MD5(). SHA() es
            sinónimo de SHA1().
          
Ésta es una traducción del manual de referencia de MySQL, que puede encontrarse en dev.mysql.com. El manual de referencia original de MySQL está escrito en inglés, y esta traducción no necesariamente está tan actualizada como la versión original. Para cualquier sugerencia sobre la traducción y para señalar errores de cualquier tipo, no dude en dirigirse a mysql-es@vespito.com.

