problema con encriptacion simetrica

14/02/2007 - 01:40 por Alexander | Informe spam
primero voy a especificar el entorno y las caracteristicas del medio en que
me encuentro y luego hago mi pregunta

estoy tratando de encryptar asimetricamente un arreglo de bytes que no
proviene de un string( System.Text.Encoding.Unicode.GetBytes("string") ) ,
sino de un objeto que serializo con MemoryStream , de la sgte manera:

System.Runtime.Serialization.Formatters.Binary.BinaryFormatter formateador =
new System.Runtime.Serialization.Formatters.Binary.BinaryFormatter();
System.IO.MemoryStream stream= new System.IO.MemoryStream();

formateador.Serialize( stream , miObjeto);

byte[] arrBytes = stream.ToArray();

luego con una instancia de RSACryptoServiceProvider procedo a encriptar el
arreglo arrBytes

rsaprovider.Encrypt( arrBytes , false )

pero me da este error "bad length"

especifique arriba que el arreglo de bytes no proviene de un string porque
cuando trato de serializar un string todo pincha bien , el problema esta
cuando lo hago con array de un objeto serializado, otra cosa, ya probe con
claves de diferentes longitudes y sigue el mismo bateo .
 

Leer las respuestas

#1 Alberto Poblacion
14/02/2007 - 08:00 | Informe spam
"Alexander" wrote in message
news:
[...]
rsaprovider.Encrypt( arrBytes , false )
pero me da este error "bad length"



Fíjate en el manual en línea, cerca del final de la descripción de la
función Encrypt, donde te advierte que te saldrá un CryptographicException,
entre otros casos, si la longitud del array excede del valor máximo
admitido, que cuando usas acolchado PCKS 1.5 (el parámetro false), resulta
ser igual a la longitud del módulo menos 11 bytes. Comprueba la longitud de
tus datos serializados, que se deben estar pasando de ese límite.

Para cifrar datos largos, es preferible usar criptografía simétrica. Lo
que se hace es generar al azar una clave simétrica, y cifrar esta clave (que
es relativamente pequeña) con el algoritmo asimétrico, y luego el bloque
grande de datos se cifra usando esa clave mediante un algoritmo simétrico,
que no tiene límite de longitud.

Preguntas similares