AES cifrado / descifrado con el Ejemplo BouncyCastle en J2ME
-
27-09-2019 - |
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.
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);
}