Nota:
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
Importante
En este artículo se describe el cifrado mediante cryptoAPI heredado. En el caso de las nuevas aplicaciones, use Cryptography API: Next Generation (CNG) en su lugar. Para obtener un ejemplo de cifrado moderno mediante CNG con AES, consulte Cifrado de datos con CNG.
En el procedimiento siguiente se describen los pasos que se deben seguir para cifrar un mensaje con las funciones criptográficas base. Para cifrar mensajes mediante estándares PKCS #7, consulte Funciones de mensajes de bajo nivel y Funciones de mensaje simplificadas.
Para cifrar un mensaje
Genere una clave de sesión mediante la función CryptGenKey .
La realización de esta llamada genera una clave aleatoria y devuelve un identificador para que la clave se pueda usar para cifrar y descifrar datos. El algoritmo de cifrado que se va a usar también se especifica en este momento. Dado que CryptoAPI no permite que las aplicaciones usen algoritmos de clave pública para cifrar datos masivos, especifique un algoritmo simétrico como RC2 o RC4 con la llamada a CryptGenKey .
Como alternativa, use la función CryptDeriveKey para transformar una contraseña en una clave adecuada para el cifrado.
Si una aplicación necesita cifrar el mensaje para que cualquier usuario con una contraseña especificada pueda descifrar los datos, use CryptDeriveKey para transformar la contraseña en una clave adecuada para el cifrado.
Note
En este caso, esta función se llama en lugar de la función CryptGenKey y no se necesitan las llamadas posteriores a CryptExportKey .
Si es necesario, establezca propiedades criptográficas adicionales de la clave mediante la función CryptSetKeyParam .
Una vez generada la clave, se pueden establecer propiedades criptográficas adicionales de la clave con la función CryptSetKeyParam. Esta función permite cifrar diferentes secciones del archivo con distintas sales de clave y proporciona una manera de cambiar el modo de cifrado o el vector de inicialización de la clave. Estos parámetros se pueden usar para que el cifrado se ajuste a un estándar de cifrado de datos determinado.
Cifre los datos del archivo con la función CryptEncrypt .
La función CryptEncrypt toma la clave de sesión que se generó en el paso anterior y cifra un búfer de datos.
Note
A medida que se cifran los datos, los datos pueden expandirse ligeramente mediante el algoritmo de cifrado. La aplicación es responsable de recordar la longitud de los datos cifrados para que se pueda especificar la longitud adecuada más adelante para la función CryptDecrypt .
Opcionalmente, use la función CryptExportKey para permitir al usuario actual descifrar los datos en el futuro.
Para permitir que el usuario actual descifre los datos en el futuro, la función CryptExportKey se usa para guardar la clave de descifrado en un formulario cifrado (un BLOB de clave) que solo se puede descifrar con la clave privada del usuario. Esta función requiere la clave pública de intercambio de claves del usuario para este fin, que se puede obtener mediante la función CryptGetUserKey . La función CryptExportKey devolverá un BLOB de clave que debe almacenar la aplicación para su uso en el descifrado del archivo.
Note
Si la aplicación tiene certificados (o claves públicas) para otros usuarios, puede permitir que otros usuarios descifren el archivo realizando llamadas CryptExportKey para cada usuario que debe recibir acceso. La aplicación debe almacenar los BLOB de claves devueltos, tal como se indica en el paso 5.
Creación de un mensaje cifrado
Las funciones de mensaje simplificadas facilitan el cifrado y descifrado de datos. En la ilustración siguiente se muestran las tareas individuales que se deben realizar para cifrar un mensaje. Los pasos se describen en la lista siguiente.
Para cifrar un mensaje
- Obtenga un puntero al mensaje de texto no cifrado.
- Genere una clave simétrica (sesión).
- Con la clave simétrica y el algoritmo de cifrado especificados, cifre los datos del mensaje.
- Abra un almacén de certificados.
- Obtenga el certificado del destinatario.
- Obtenga la clave pública del certificado del destinatario.
- Con la clave pública del destinatario, cifre la clave simétrica.
- Obtenga el identificador del destinatario a partir del certificado del destinatario.
- Incluya lo siguiente en el mensaje ensobrado digitalmente: el algoritmo de cifrado de datos, los datos cifrados, la clave simétrica cifrada y el identificador del destinatario.