tipos quality infosolutions generar encriptar encriptado encriptacion desencriptar c# encryption header bmp

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.