¿Qué algoritmo de cifrado utiliza CryptEncrypt en Crypto API?

-1

Estoy escribiendo un código para realizar el cifrado y descifrado utilizando CryptEncrypt y CryptDecrypt de las funciones , una parte de la API criptográfica de Windows. ¿Alguien puede decirme qué tipo de cifrado utilizan estas dos funciones? ¿Está utilizando AES o DES o 3DES u otros?

    
pregunta liveforFun 25.03.2015 - 08:03
fuente

1 respuesta

0

Encriptación de datos de MSDN y funciones de descifrado

Tú eliges qué algoritmo usar.

Tiene que usar CryptAcquireContext para obtener un identificador para el proveedor de servicios criptográficos. Luego llame a CryptGenKey para generar un cifrado objeto clave. Esta función es donde se define el algoritmo que desea utilizar. También debe llamar a CryptCreateHash para crear un identificador para un objeto hash. Luego llama a CryptEncrypt con el objeto clave y el objeto hash que acaba de generar.

BOOL WINAPI CryptGenKey(
  _In_   HCRYPTPROV hProv,
  _In_   ALG_ID Algid,
  _In_   DWORD dwFlags,
  _Out_  HCRYPTKEY *phKey
);

Posibles ALG_IDs

La mayoría de las implementaciones de cifrado requieren que llame a una función final para finalizar el cifrado. Esto tendrá en cuenta cualquier relleno que deba agregarse, y probablemente algún otro tipo de limpieza algorítmica. En general, lo que esto significa es que el último bloque de datos cifrados no se envía al búfer hasta que se llama a esta función final . Por ejemplo, en OpenSSL (cuando usas las funciones de EVP) tienes EVP_EncryptInit , EVP_EncryptUpdate y EVP_EncryptFinal .

Implementación de Microsoft de CryptEncrypt proporciona un argumento boolean final . Cuando está cifrando su última sección de datos, necesita establecer este valor en TRUE . Si solo está cifrando un tamaño de bloque único (o menos) de datos, debe establecer este valor en TRUE . La sección de comentarios de CryptEncrypt explica qué realizan cuando se establece en verdadero.

  
  1. Si la clave es una clave de cifrado de bloque, los datos se rellenan con un múltiplo del tamaño de bloque del cifrado. Si la longitud de los datos es igual al bloque   tamaño del cifrado, se agrega un bloque adicional de relleno a la   datos. Para encontrar el tamaño de bloque de un cifrado, use CryptGetKeyParam para obtener   el valor KP_BLOCKLEN de la clave.
  2.   
  3. Si el cifrado está funcionando en un modo de encadenamiento, la siguiente operación CryptEncrypt restablece el registro de retroalimentación del cifrado al   Valor KP_IV de la clave.
  4.   
  5. Si el cifrado es un cifrado de flujo, el siguiente CryptEncrypt restablece el cifrado a su estado inicial.
  6.   

CryptDecrypt proporciona lo mismo boolean final variable, y la misma operación debe realizarse al descifrar los datos.

    
respondido por el RoraΖ 25.03.2015 - 13:58
fuente

Lea otras preguntas en las etiquetas