Tengo la sensación de que Microsoft y Mac usan dos formas diferentes de AES

0

Tengo una cadena AES que se produce con esta clase, the AesCryptoServiceProvider Class proporcionado por Microsoft.

Y necesito decodificar este cifrado con Ruby SSL: : Clase de cifrado .

El problema es que si uno cifra uno con uno, no puede descifrarlo con el otro.

Un ejemplo de mi código VB.NET:

Private Const AesIV As String = "!QAZ2WSX#EDC4RFV"
Private Const AesKey As String = "5TGB&YHN7UJM(IK<"
aes.Mode = CipherMode.CBC
aes.Padding = PaddingMode.PKCS7
aes.BlockSize = 128
aes.KeySize = 128

Que produce esta cadena:

p6SI3+hMRFRsQG5Vk+R1YdXv9EaCsfAuB0ZSsqkBcy83ki20U0bV5TZrwxJ0C4dlpSEJDwc7b5znd/8UNXEhcXV0m8tAms3lp4ZS2aUaSfc=

Y luego mi código ruby hace esto:

cipher = OpenSSL::Cipher::AES128.new :CBC
# ^ That's 128 bit block in CBC mode, it defaults to 128 key size
cipher.iv = "!QAZ2WSX#EDC4RFV"
cipher.key = "5TGB&YHN7UJM(IK<"

solution = cipher.update("p6SI3+hMRFRsQG5Vk+R1YdXv9EaCsfAuB0ZSsqkBcy83ki20U0bV5TZrwxJ0C4dlpSEJDwc7b5znd/8UNXEhcXV0m8tAms3lp4ZS2aUaSfc=")

> "\xAC\xF3J{Cw\x95\xD8\x0F'\xC2\xB4,\xF2\x8E\xFE\xC9\x95\xD7\xE6JcB7\v\xBA\xD8kP'\a\x80\x81\x00\xC1\xCC\xE4\x95\x9E_5Ws\xF9j\xDF\xAC\xBA\"K\xF2\xB7,\x7F4\n\r\xB2\xF5\xC7R\xCFn\x97B\x05\\xE70\\x11x\xFA\v\xA2k\xBE(\x1E\xEB*O$\xDCc\xD7\xBEfs\x99\xADD\xC0\x1F\xBB9"   

solution << cipher.final

> OpenSSL::Cipher::CipherError: wrong final block length
    
pregunta Trip 01.04.2014 - 12:50
fuente

1 respuesta

3

Hay varias cosas extrañas en tu configuración:

  • El modo ECB no utiliza ningún IV. No debe especificar un IV cuando se utiliza el modo ECB. O, más bien, no debe usar el BCE, que es débil (en general).

  • AES procesa la entrada binaria, produce una salida binaria y usa una clave binaria. No hay ninguna cadena de caracteres en absoluto en AES; por lo tanto, cualquier noción de codificación como UTF-8 debería ser completamente irrelevante y fuera de alcance. Si necesita especificar una codificación, esto significa que hay una cadena de caracteres que se convierte a bytes o atrás, y eso puede ser una fuente de sus problemas.

  • Lo que llamas "tamaño de bit" no está claro. Un poco es un poco. Tal vez te refieres a "tamaño de bloque". AES usa bloques de 128 bits, siempre.

respondido por el Tom Leek 01.04.2014 - 13:05
fuente

Lea otras preguntas en las etiquetas