2010-11-22 160 views
4

我想加密和解密使用AES算法充气城堡 在J2ME数据可以在任何一个给我的示例代码为AES加密/解密中J2ME

我想使用ECB与PKCS5Padding

在此先感谢。

回答

19

我确信有例子,但我没有找到它们。这里有一些提示可以帮助你开始。您需要了解如何将BC类连接在一起。首先,获取bouncycastle源代码并准备在有问题时查看它。它实际上非常可读,所以当documentation差时不要害怕检查它。例如,许多类需要一个CipherParameters对象的实例,但文档很少指定任何更多的细节。但是,在源代码中,预期哪些实现类是显而易见的。

选择其中一个AES引擎,例如AESEngine作为加密引擎。接下来选择一种模式; ECB很少是正确的,例如,如果您选择CBC模式,则会从AESEngine对象中创建一个CBCBlockCipher对象。接下来,使用此对象创建一个PaddedBufferBlockCipher对象。默认构造函数使用PKCS7填充,它与您想要的PKCS5填充相同。现在您需要创建一个对象来保存密钥和IV。这是CipherParameters界面。您分两步创建对象。首先,用你的密钥创建一个KeyParameter对象。接下来,你用你的KeyParameter对象和你的IV创建一个ParametersWithIV对象。此对象提供给PaddedBufferBlockCipher对象的init方法,然后您就可以开始了。

编辑

下面是小例子:

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); 
} 
+0

嘿感谢您的帮助,你能为我提供了相同的一些示例代码? – Mihir 2010-11-23 07:11:36

+0

如何在J2me中生成IV以及IV的重要性? – Mihir 2010-11-25 13:35:41

+0

对不起,我不会为您提供加密教程。 – 2010-11-25 14:41:00