我想使用Bouncy Castle库,在J2ME中使用AES算法加密和解密数据,你能否提供样例代码?
我希望使用ECB模式并采用PKCS5Padding填充。
谢谢。
我希望使用ECB模式并采用PKCS5Padding填充。
谢谢。
CipherParameters
对象的实例,但很少有文档会指定更多的细节。然而,在源代码中,期望哪些实现类将是显而易见的。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);
}
encrypted = new String( enc );
这样做是不正确的,会丢失信息。 - President James K. Polk