md5cryptoserviceprovider example encrypt decrypt crypto code and algoritmo c# encryption 3des

example - Tamaño de clave 3DES importa en C#.Net



md5cryptoserviceprovider encrypt decrypt c# (4)

Aquí hay un código que usé para lograr este "ajuste"

byte[] keyArray; SHA512CryptoServiceProvider hash = new SHA512CryptoServiceProvider(); keyArray = hash.ComputeHash(UTF8Encoding.UTF8.GetBytes("someProperlySaltedKey")); byte[] trimmedBytes = new byte[24]; Buffer.BlockCopy(keyArray, 0, trimmedBytes, 0, 24); keyArray = trimmedBytes; TripleDESCryptoServiceProvider tdes = new TripleDESCryptoServiceProvider(); tdes.Key = keyArray;

A continuación el código funciona correctamente en c # .NET

byte[] key = Encoding.ASCII.GetByte("012345678901234567890123"); //24characters byte[] plainText = Encoding.ASCII.GetBytes("lasaa"); TripleDES des = TripleDES.Create(); des.Key = key; des.Mode = CipherMode.CBC; ICryptoTransform ic = des.CreateEncryptor(); byte[] enc = ic.TransformFinalBlock(plainText, 0, plainText.Length); MessageBox.Show(UTF8Encoding.UTF8.GetString(enc));

Mis preguntas con respecto a lo anterior son ...

  1. ¿Cómo puedo especificar KeySize? si utilizo des.KeySize= 128 o 192 o 256 da

La clave especificada no es un tamaño válido para este algoritmo

  1. Si cambio la longitud del carácter en clave agregando más (por ejemplo: 40 caracteres). Da error

La clave especificada no es un tamaño válido para este algoritmo

Quiero saber por qué sucede esto?


Creo que el problema aquí es que 192 bits es el tamaño de clave máximo admitido para 3DES en C # (y supongo que en otros lugares)

http://msdn.microsoft.com/en-us/library/system.security.cryptography.symmetricalgori...

¿Ha intentado configurar la clave a un valor de 16 bytes / char?

El único otro tamaño compatible parece ser de 128 bits. Si quieres algo más fuerte, tendrás que usar un algoritmo diferente, Aes / Rijndael.

Si busca TDES en TripleDES , parece que el tamaño máximo de la clave es de 168 bits, por lo que no estoy seguro de cómo lo ha implementado Microsoft.

Sospecho que se omitió de su ejemplo por brevedad, pero probablemente debería extraer su clave de una buena dosis de sal. Hay varios algoritmos RNG / HSH para esto en el espacio de nombres criptográfico.


El tamaño de la clave para TripleDES es de 168 bits. Así que necesitarás 21 bytes. Si desea utilizar una cadena para la clave, primero debe marcarla. En cuyo caso puede usar cualquier longitud de caracteres (cuanto más mejor) y luego recortar la salida de hash a su tamaño de clave. Por ejemplo, si usa SHA-256 de los cuales obtendrá 32 bytes, use 21 de ellos.


Una clave 3DES tiene una longitud de 128 o 192 bits. Tenga en cuenta que, internamente , el algoritmo utilizará solo 112 (respectivamente 168) bits de esos 128 (respectivamente 192) bits; sin embargo, la clave en sí misma, como se codifica en bytes, almacenada e intercambiada, debe tener una longitud de 16 o 24 bytes. Al intentar configurar una clave que no tiene una de esas dos longitudes se genera un error, que se observa cuando intenta utilizar una clave de 40 bytes.

No debe intentar establecer el "tamaño de clave": ya lo decide cuando configura la clave. Cuando configura la propiedad TripleDES.Key , la clase TripleDES ve que le TripleDES una clave de 24 bytes y, por lo tanto, se establecerá la propiedad KeySize en 192.

(La salida del cifrado 3DES es binaria, no la codificación UTF-8 de una cadena. Lo más probable es que UTF8Encoding.UTF8.GetString(enc) su UTF8Encoding.UTF8.GetString(enc) ).