c# - quality - Eliminar el encabezado bmp para encriptar
quality infosolutions encriptar c# (2)
Soy bastante nuevo en C # y me entregaron este proyecto de cifrado AES en imágenes. Probablemente hay algo muy simple que me falta aquí. Estoy tratando de eliminar el encabezado de un bmp y cifrar el resto, luego agregar el encabezado. Si no elimino el encabezado, el programa funciona bien. Para eliminar, probé esto (el encabezado de bmp es de 54 bytes):
MyImage = new Bitmap("path");
MemoryStream ms = new MemoryStream();
MyImage.Save(ms, System.Drawing.Imaging.ImageFormat.Bmp);
byte[] Header=null, picture=null, pictureFull = ms.ToArray();
for (int i = 0; i < pictureFull.Length; i++)
{
if (i < 54)
{ Header[i] = pictureFull[i]; }
else
{ picture[i - 54] = pictureFull[i]; }
}
byte[] demoKeyBytes = new byte[] { 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f};
PaddingMode padding = PaddingMode.ISO10126;
EncryptedImg = EncryptCall(demoKeyBytes, padding, picture);
El problema es que si trato de encriptar y descifrar "imagen" obtengo un valor nulo. También obtengo un valor nulo si continúo enc / dec con la imagen completa "pictureFull". Necesito eliminar completamente FOR para que el programa enc / dec normalmente "pictureFull", aunque ese FOR ni siquiera lo modifique. ¿Hay alguna otra forma de guardar matrices de bytes [] o lo que está mal?
Pruebe eso en lugar de FOR:
byte[] pictureFull = ms.ToArray();
byte[] Header = pictureFull.Take(54);
byte[] picture = pictureFull.Skip(54);
y continuar con el cifrado. PD: no olvide agregar el espacio de nombres System.Linq
byte[]
es un objeto, por lo que no desea inicializar una variable de ese tipo en null
. Es probable que desee inicializar el Header
esta manera:
byte[] Header = new byte[54];
y la picture
a un new byte[]
con una longitud al menos igual a la longitud real de los datos de la imagen, como esta:
byte[] picture = new byte[pictureFull.Length - 54];
Entonces puedes copiar cosas a ellos.