BlackBerry Encryption AES 256 - No Padding

六月ゝ 毕业季﹏ 提交于 2019-12-13 07:51:26

问题


I want to encrypt data in BlackBerry using the AES 256 encryption method. The requirement is to encrypt with No Padding; "AES/ECB/NoPadding". I am passing a 16 byte array and the encrypted data returned is a hex value of length 32. I have tried the following but it is not producing the correct result. The returned value is different from the expected encrypted value; tested in Android. The results between Android and BlackBerry do not tally. I have used the following method:

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;
      }

Can anyone please guide?

EDIT: Below is the equivalent Android code:

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:


There's a mistake in your Basic4Android code. You initialize the cipher with AES:

c.Initialize("AES/ECB/NoPadding")

but then initialize the key generator with TripleDES:

Kg.Initialize("DESede")

According to this documentation, just change "DESede" to "AES":

Kg.Initialize("AES")

Also, I wouldn't recommend using AES with ECB and no padding. It's insecure, especially when it's just as easy to use CBC or CTR mode. See this wikipedia article for an example of how unsafe it really is.



来源:https://stackoverflow.com/questions/14210082/blackberry-encryption-aes-256-no-padding

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!