2009-05-23 23 views

Respuesta

0

Bouncy castle tiene una biblioteca fantástica para hacer esto. El problema principal será cómo obtener la clave allí de forma segura. Descubrí que .NET y Java serializan las claves de formas incompatibles, así que terminé usando Bouncy Castle en ambos lados para facilitar la transferencia de claves, ya que se transfirió utilizando RSA, por razones de seguridad.

5

Recomiendo usar la API de BlackBerry (Bouncy Castle funcionará, pero ¿para qué complicar las cosas?).

Utilice el paquete net.rim.crypto: está utilizando todo el cifrado simétrico, por lo que solo necesitará el estándar RIM signing keys para ejecutar en un dispositivo ($ 20 y 2-3 días para obtenerlo); mientras tanto, puede hacer todo con el simulador.

Básicamente, querrá crear un PKCS5UnformatterEngine que envuelva un CBCDecryptorEngine que envuelve un AESDecryptorEngine. Probablemente envuelva todo en un BlockDecryptor para que pueda tratar como en InputStream. Algo así como (y que ha sido un poco de tiempo desde que he hecho esto, así que puede que no funcione al 100% tal como está escrita):

InputStream encryptedInput; // if you have a byte[] of data, use a ByteArrayInputStream 
AESKey key = new AESKey(<your key data as a byte[]>) 
InitializationVector iv = new InitializationVector(<your iv data as a byte[]>) // of course you need to know your IV since you're doing CBC encryption 

BlockDecryptor decryptor = new BlockDecryptor(
    new PKCS5UnformatterEngine(
     new CBCDecryptorEngine(
     new AESDecryptorEngine(key), 
     iv 
    ) 
    ) 
); 

// then decryptor acts as an InputStream which gives you your decrypted, unpacked data 

decryptor.read(buffer); // buffer will contain decrypted, unpacked data 
+0

que es una respuesta mejor que la mía, pero en mi defensa que no vi la etiqueta de blackberry hasta que lea el tuyo. :-) – wds

Cuestiones relacionadas