AES / Decryption avec bouncycastle exemple dans J2ME
-
27-09-2019 - |
Question
Je veux Chiffrer les données et Décrypter à l'aide de l'algorithme AES J2ME avec château gonflable peut me donner un exemple de code pour que
Je veux utiliser BCE PKCS5Padding
Merci à l'avance.
La solution
Je suis sûr qu'il ya des exemples là, mais je ne les ai pas trouvé. Voici quelques conseils pour vous aider à démarrer. Vous devez apprendre comment connecter les classes de la Colombie-Britannique ensemble. Tout d'abord, obtenir le code source bouncycastle et être prêt à regarder quand vous avez des questions. Il est en fait très lisible alors ne pas avoir peur d'examiner quand la documentation est pauvre. Par exemple, de nombreuses classes veulent une instance d'un objet CipherParameters
, mais il est rare que la documentation de préciser plus en détail. Cependant, dans le code source, il est évident que pour les classes de mise en œuvre sont attendus.
Choisissez un des moteurs AES, par exemple AESEngine
, comme le moteur de cryptage. Suivant choisir un mode; BCE est rarement correcte, donc par exemple si vous choisissez le mode CBC puis créer un objet à partir de votre CBCBlockCipher
objet AESEngine
. Ensuite, utilisez cet objet pour créer un objet PaddedBufferBlockCipher
. Le constructeur par défaut utilise padding PKCS7 qui est identique au rembourrage de PKCS5 que vous voulez. Maintenant, vous devez créer un objet pour maintenir la clé et IV. Ceci est l'interface CipherParameters
. Vous créez l'objet en deux étapes. Tout d'abord, vous créez un objet KeyParameter
avec votre clé. Ensuite, vous créez un objet ParametersWithIV
avec votre objet et votre KeyParameter
IV. Cet objet est fourni à la méthode init
de l'objet PaddedBufferBlockCipher
et vous êtes prêt à aller.
EDIT
Voici petit exemple:
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);
}