我想使用带有充气城堡的 AES 算法在 J2ME 中加密和解密数据,任何人都可以给我示例代码
我想将 ECB 与 PKCS5Padding 一起使用
提前致谢。
我想使用带有充气城堡的 AES 算法在 J2ME 中加密和解密数据,任何人都可以给我示例代码
我想将 ECB 与 PKCS5Padding 一起使用
提前致谢。
我敢肯定那里有例子,但我还没有找到。这里有一些提示可以帮助您入门。您需要学习如何将 BC 类连接在一起。首先,获取 bouncycastle 源代码,并准备好在有问题时查看它。它实际上非常易读,所以当文档很差时不要害怕检查它。例如,许多类都需要一个CipherParameters
对象的实例,但文档很少指定更多细节。但是,在源代码中很明显需要哪些实现类。
选择其中一种 AES 引擎,例如AESEngine
,作为加密引擎。接下来选择一种模式;ECB 很少是正确的,例如,如果您选择 CBC 模式CBCBlockCipher
,则从您的对象创建一个AESEngine
对象。接下来,使用这个对象来创建一个PaddedBufferBlockCipher
对象。默认构造函数使用与您想要的 PKCS5 填充相同的 PKCS7 填充。现在您需要创建一个对象来保存密钥和 IV。这是CipherParameters
界面。您分两步创建对象。首先,您KeyParameter
使用您的密钥创建一个对象。接下来,您ParametersWithIV
使用您的KeyParameter
对象和 IV 创建一个对象。这个对象被提供给对象的init
方法,PaddedBufferBlockCipher
然后你就可以开始了。
编辑
这是一个小例子:
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);
}