2011-08-11 16 views
5

Tengo que encriptar una pieza de texto usando Ruby. He usado la gema Ruby-Openssl para ese propósito. Este texto cifrado es el que se pasa a un programa de Python con el que debo descifrarlo. He usado Pycrypto para este propósito.Encriptación/descifrado AES entre Ruby-OpenSSL, PyCrypto

El problema es que en Pycrypto tenemos que especificar la convención de relleno manualmente. En Ruby, el relleno se realiza automáticamente. Estoy usando el modo de cifrado de bloques AES-CBC. Este relleno causa problemas ya que su eliminación no se puede realizar correctamente en Python. A modo de ejemplo, éstas son las codificaciones base64 de un texto cifrado, tanto en Ruby y Python:

Python: aENJY28lvE89yY2T/te8vWwdeoeSqSwwlrOAv7b3AWw= 
Ruby: aENJY28lvE89yY2T/te8vVoQE6JNxdSRgYXC8mqF3nI= 

Por favor ayuda ...

Respuesta

3

OpenSSL aplica PKCS # 5Padding de forma predeterminada, por lo que también se utiliza automáticamente al cifrar datos con OpenSSL::Cipher en modo AES-CBC (consulte OpenSSL docs). Por lo tanto, no es necesario realizar un relleno manual al usar Ruby.

El relleno debe hacerse manually en Python cuando se usa PyCrypto.

Una vez que aplique este esquema de relleno en Python, ambas cadenas de Base64 cifradas deben coincidir.

+0

Intenté usar M2Crypto. Lamentablemente, no parece funcionar con el programa proporcionado en el enlace. Trataré de aplicar el relleno PKCS # 5. – vishy1618

+0

Funciona con la lógica de relleno, ¡gracias! – vishy1618

+0

Bueno, de nada. – emboss

0

Parece que necesita para ser especificando el modo de relleno correcto para utilizar tanto en Casos: el relleno es una propiedad fundamental de un flujo de cifrado, y debe coincidir tanto con el receptor como con el remitente.

+0

El relleno se puede manipular manualmente en PyCrypto, es decir, se especifica la lógica mediante la cual se realiza el relleno. En Ruby, por otro lado, el relleno se realiza de forma automática, no veo ninguna forma de configurarlo aparte de duplicar la lógica en Python. – vishy1618

+0

o bien debe hacer en Python lo que se está haciendo automáticamente en Ruby o hacerlo manualmente en ambos. – agf

+0

No he encontrado una forma de hacerlo manualmente en Ruby. Lo cual me deja con la modificación de mi programa Python, excepto que no sé cómo se completa el relleno en Ruby-Openssl. – vishy1618