BlackBerry Encryption AES 256 - 无填充

时间:2013-01-08 07:25:19

标签: android blackberry encryption aes

我想使用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)

1 个答案:

答案 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,了解其实际不安全的示例。