我想使用 AES 256 加密方法加密 BlackBerry 中的数据。要求是使用无填充加密;“ AES/ECB/NoPadding ”。我正在传递一个 16 字节数组,返回的加密数据是长度为 32 的十六进制值。我尝试了以下方法,但没有产生正确的结果。返回值与预期的加密值不同;在安卓中测试。Android 和黑莓之间的结果并不相符。我使用了以下方法:
public static String EncryptData(byte[] keyData, byte[] data) throws Exception {
String encryptedData = "";
AESKey key = new AESKey(keyData);
NoCopyByteArrayOutputStream out = new NoCopyByteArrayOutputStream();
AESEncryptorEngine engine = new AESEncryptorEngine(key);
BlockEncryptor encryptor = new BlockEncryptor(engine, out);
encryptor.write(data, 0, data.length);
int finalLength = out.size();
byte[] cbytes = new byte[finalLength];
System.arraycopy(out.getByteArray(), 0, cbytes, 0, finalLength);
encryptedData = getHexString(cbytes);
return encryptedData;
}
任何人都可以请指导吗?
编辑:下面是等效的 Android 代码:
Dim Kg As KeyGenerator
Dim c As Cipher
c.Initialize("AES/ECB/NoPadding") ' just "DES" actually performs "DES/ECB/PKCS5Padding".
Kg.Initialize("DESede")
Kg.KeyFromBytes(key)
bytes = Kg.KeyToBytes
msg_data = c.Encrypt(msg_data, Kg.key, False)
Return Bconv.HexFromBytes(msg_data)