[SOLUCIONADO] AES 256 y los bytes

Iniciado por Lafleur212, Julio 30, 2020, 09:24:38 AM

Tema anterior - Siguiente tema

0 Miembros y 1 Visitante están viendo este tema.

Julio 30, 2020, 09:24:38 AM Ultima modificación: Julio 30, 2020, 02:00:54 PM por DtxdF
Haciendo pruebas de criptografía, he detectado una anomalía.
Bajo C#,he programado cifrar una cadena de bytes, a esa cadena de bytes le he modificado un byte, y en el proceso de descifrado me da error. Usando naturalmente la misma clave.
El error que me da es " invalid padding".... .al ser una cadena cifrada,evidentemente no me dara el texto original al descifrarlo, pero esperaba que me diera algo, pero detiene el proceso.
La pregunta es.. cómo sabe el algoritmo AES que se ha modificado un byte? No debiera dar una cadena de bytes erratica pero darla?
Gracias


Hola @No tienes permitido ver los links. Registrarse o Entrar a mi cuenta ^-^

Deduciendo lo que está tratando de hacer y el error me suena a que no le está pasando un relleno (pad/unpad) a los datos antes de cifrar. Me refiero a la típica función o algoritmo que rellena los datos sin formato hasta que sea múltiplo del tamaño de bloques.

Aunque depende del modo que esté usando, ya que si usamos CTR, no pasará nada, pero si usa ECB, puede obtener un error. También debe recordar que en el cifrado de bloques no sólo tiene un nombre bonito, sino que también es signiticativo a su función interna. Si trata de usar el modo ECB y le pasa 16 bytes (sin rellenar), cifrará sin problemas, pero si le pasa 17 bytes, error.

~ DtxdF
PGP :: <D82F366940155CB043147178C4E075FC4403BDDC>

~ DtxdF

En realidad uso CBC, pero no añado ni resto bytes, únicamente cambio un byte por otro. La longitud de bytes de la cadena cifrada no varía.
Simplemente cifro, acto seguido modifico un solo byte a la cadena cifrada, e intento descifrar.
No se, algo muy raro

@No tienes permitido ver los links. Registrarse o Entrar a mi cuenta

Como le mencioné, el error es muy frecuente (sin importar la implementación) cuando el modo a usar requiere que sea un múltiplo del tamaño del bloque, es aplicado tanto para cifrar como para su contraparte, descifrar, por lo que si usted borra uno o más bytes de la cadena cifrada ocurrirá el susodicho error; si modifica un byte por otro, pero la longitud sigue siendo un múltiplo del tamaño del bloque, el error dependerá de la implementación de AES y el modo CBC.

Para ilustrar mejor lo que traté de describir, veamos lo que sucede cuando cifro un dato y le elimino el último byte para luego descifrarlo:


Simplemente generó un error porque la longitud original era de 16 y ahora es de 15 bytes.


Veamos otro, pero a diferencia del anterior en el siguiente no descifraremos la cadena cifrada completamente, sino un múltiplo de ésta:


Como se puede apreciar, se descifra correctamente a pesar de no ser de la misma longitud que la original, pero es un múltiplo del tamaño de bloques, es por es que es satisfactorio.

Ahora veamos lo que sucede cuando se trata de descifrar la cadena cifrada con el útimo byte modificado:


Se descifró correctamenete, aunque también si se es observador, no es la cadena original la que obtenemos.

Bien, tal vez usted dirá pero a mí me genera un error cuando modifico un byte, como le dije depende de la implementación misma y del algoritmo. En esta No tienes permitido ver los links. Registrarse o Entrar a mi cuenta puedes cifrar datos usando AES en dos modos ECB y CBC, si se trata de hacer todo lo que he hecho en las imágenes, genera un error, por lo que sería mejor descripción de lo ya expliqué.

Tal vez le interese:

* No tienes permitido ver los links. Registrarse o Entrar a mi cuenta
* No tienes permitido ver los links. Registrarse o Entrar a mi cuenta


~ DtxdF
PGP :: <D82F366940155CB043147178C4E075FC4403BDDC>

~ DtxdF

No tienes permitido ver los links. Registrarse o Entrar a mi cuenta
@No tienes permitido ver los links. Registrarse o Entrar a mi cuenta

Como le mencioné, el error es muy frecuente (sin importar la implementación) cuando el modo a usar requiere que sea un múltiplo del tamaño del bloque, es aplicado tanto para cifrar como para su contraparte, descifrar, por lo que si usted borra uno o más bytes de la cadena cifrada ocurrirá el susodicho error; si modifica un byte por otro, pero la longitud sigue siendo un múltiplo del tamaño del bloque, el error dependerá de la implementación de AES y el modo CBC.

Para ilustrar mejor lo que traté de describir, veamos lo que sucede cuando cifro un dato y le elimino el último byte para luego descifrarlo:


Simplemente generó un error porque la longitud original era de 16 y ahora es de 15 bytes.


Veamos otro, pero a diferencia del anterior en el siguiente no descifraremos la cadena cifrada completamente, sino un múltiplo de ésta:


Como se puede apreciar, se descifra correctamente a pesar de no ser de la misma longitud que la original, pero es un múltiplo del tamaño de bloques, es por es que es satisfactorio.

Ahora veamos lo que sucede cuando se trata de descifrar la cadena cifrada con el útimo byte modificado:


Se descifró correctamenete, aunque también si se es observador, no es la cadena original la que obtenemos.

Bien, tal vez usted dirá pero a mí me genera un error cuando modifico un byte, como le dije depende de la implementación misma y del algoritmo. En esta No tienes permitido ver los links. Registrarse o Entrar a mi cuenta puedes cifrar datos usando AES en dos modos ECB y CBC, si se trata de hacer todo lo que he hecho en las imágenes, genera un error, por lo que sería mejor descripción de lo ya expliqué.

Tal vez le interese:

* No tienes permitido ver los links. Registrarse o Entrar a mi cuenta
* No tienes permitido ver los links. Registrarse o Entrar a mi cuenta


~ DtxdF

Si ya lo entiendo,gracias por las molestias, me es muy útil.

Es un placer @No tienes permitido ver los links. Registrarse o Entrar a mi cuenta, como siempre.

Le deseo suerte.

~ DtxdF
PGP :: <D82F366940155CB043147178C4E075FC4403BDDC>

~ DtxdF