我想使用AES 256加密方法在BlackBerry中加密数据。要求是使用无填充加密; “的 AES / ECB / NoPadding ”。我传递一个16字节的数组,返回的加密数据是长度为32的十六进制值。我尝试了以下但是它没有产生正确的结果。返回值与预期加密值不同;在Android中测试过。 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)
答案 0 :(得分:0)
您的Basic4Android代码有误。您使用AES初始化密码:
c.Initialize("AES/ECB/NoPadding")
但随后使用TripleDES初始化密钥生成器:
Kg.Initialize("DESede")
根据this documentation,只需将“DESede”更改为“AES”:
Kg.Initialize("AES")
此外,我不建议将AES与ECB一起使用,也不建议使用填充。这是不安全的,特别是当它使用CBC或CTR模式时同样容易。请参阅this wikipedia article,了解其实际不安全的示例。