Necesito cifrar una cadena en el iPhone y enviarla a un servicio web .Net para su descifrado. Puedo cifrar/descifrar en el iPhone y con .Net, pero las cadenas cifradas del iPhone no pueden ser descifradas por .Net. El error que recibo es "El relleno no es válido y no se puede eliminar".Interoperabilidad AES entre .Net y iPhone?
El código .Net es de: http://blog.realcoderscoding.com/index.php/2008/07/dot-net-encryption-simple-aes-wrapper/
El código iPhone utiliza el código de ejemplo: http://nootech.wordpress.com/2009/01/17/symmetric-encryption-with-the-iphone-sdk/
yo sepa mi configuración clave son los mismos:
result.BlockSize = 128; // iPhone: kCCBlockSizeAES128
result.KeySize = 128; // kCCBlockSizeAES128
result.Mode = CipherMode.CBC;
result.Padding = PaddingMode.PKCS7; // kCCOptionPKCS7Padding
Probé diferentes maneras de generar texto cifrado. hola/hola es:
e0PnmbTg/3cT3W + 92CDw1Q == en .Net
yrKe5Z7p7MNqx9 + CbBvNqQ == en iPhone
y "openssl enc -aes-128-cbc -nosalt -a -en hello.txt -pass pase: hello "genera: QA + Ul + r6Zmr7yHipMcHSbQ ==
Actualización: I've posted the working code for this here.
también probé openSSL y no funcionó bien: openssl enc -d -aes -128-cbc -a -in crypt.txt -pass pase: hola –
Si pasa el argumento -nosalt a openssl, obtendrá una codificación base64 de tamaño similar. Parece que .Net y iPhone no están usando un Vector de Inicialización explícito (salt). Pero incluso entonces, openssl no puede decodificar tampoco. ¿Supongo que cada biblioteca tiene su propia sal predeterminada? – johnny
hey boss, sé que esta es una vieja pregunta, pero estoy teniendo problemas para tratar de implementar el código que cargó, ya que creo que tengo una forma diferente de implementar el cifrado de aes, utilizo un IV con una longitud de 16. Como soy nuevo con objetivos, no estoy muy seguro de dónde se está estableciendo esa duración. – gdubs