Pregunta

quiero datos de cifrar y descifrar en J2ME utilizando el algoritmo AES con castillo hinchable puede alguien darme código de ejemplo para que

quiero usar BCE con PKCS5Padding

Gracias de antemano.

¿Fue útil?

Solución

Estoy seguro de que hay ejemplos por ahí, pero no los he encontrado. Aquí hay algunos consejos para ayudarle a empezar. Usted necesita aprender cómo conectar las clases BC juntos. En primer lugar, obtener el código fuente BouncyCastle y estar preparado para mirarlo cuando tenga preguntas. En realidad es muy fácil de leer así que no tenga miedo de examinarlo cuando el documentación es pobre. Por ejemplo, muchas clases quieren una instancia de un objeto CipherParameters, pero es raro que la documentación para especificar con más detalle. Sin embargo, en el código fuente será obvio en cuanto a que se espera que las clases que implementan.

Seleccione uno de los motores de AES, por ejemplo AESEngine, como el motor de cifrado. A continuación elija un modo; BCE raramente es correcta, así que por ejemplo si tienes que elegir el modo CBC a continuación, crear un objeto CBCBlockCipher de su objeto AESEngine. A continuación, utilizar este objeto para crear un objeto PaddedBufferBlockCipher. El constructor por defecto utiliza el relleno PKCS7 que es idéntico al acolchado PKCS5 desea. Ahora lo que necesita para crear un objeto de mantener la llave y IV. Esta es la interfaz CipherParameters. Se crea el objeto en dos pasos. En primer lugar, se crea un objeto KeyParameter con su clave. A continuación, se crea un objeto ParametersWithIV con su objeto y su KeyParameter IV. Este objeto se suministra con el método init del objeto PaddedBufferBlockCipher y esté preparado para ir.

editar

Aquí es pequeño ejemplo:

private static byte[] cipherData(PaddedBufferedBlockCipher cipher, byte[] data)
        throws Exception
{
    int minSize = cipher.getOutputSize(data.length);
    byte[] outBuf = new byte[minSize];
    int length1 = cipher.processBytes(data, 0, data.length, outBuf, 0);
    int length2 = cipher.doFinal(outBuf, length1);
    int actualLength = length1 + length2;
    byte[] result = new byte[actualLength];
    System.arraycopy(outBuf, 0, result, 0, result.length);
    return result;
}

private static byte[] decrypt(byte[] cipher, byte[] key, byte[] iv) throws Exception
{
    PaddedBufferedBlockCipher aes = new PaddedBufferedBlockCipher(new CBCBlockCipher(
            new AESEngine()));
    CipherParameters ivAndKey = new ParametersWithIV(new KeyParameter(key), iv);
    aes.init(false, ivAndKey);
    return cipherData(aes, cipher);
}

private static byte[] encrypt(byte[] plain, byte[] key, byte[] iv) throws Exception
{
    PaddedBufferedBlockCipher aes = new PaddedBufferedBlockCipher(new CBCBlockCipher(
            new AESEngine()));
    CipherParameters ivAndKey = new ParametersWithIV(new KeyParameter(key), iv);
    aes.init(true, ivAndKey);
    return cipherData(aes, plain);
}
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top