Android AES加密零填充

时间:2011-07-29 19:01:26

标签: android aes padding

我需要使用AES加密文件,CBC块大小为16字节,密钥为256位。并且文件需要填零为16个字节的倍数。加密文件后,需要将填充零的数量附加到末尾。

例如,如果我有一个9字节的文件,将追加7个零字节。 16个字节将被加密,然后读取数据的长度9将被附加到末尾。所以总长度应为17个字节,最后一个字节未加密。

我正在使用Cipher类,我知道使用“AES / CBC /”,但我不知道是否有填充方法描述了我想要的内容。

编辑: 最后一个字节应该是最后16个字节填充单元中实际数据的字节数。

2 个答案:

答案 0 :(得分:2)

不确定您是否已经解决了问题,但我认为您正在寻找的填充类型是 ZeroBytePadding 。这段代码适用于2.3.3模拟器:

String stringKey = "60380131061660211660380426804995";
String message = "This is a secret message";
try {
    SecretKeySpec sks = new SecretKeySpec(stringKey.getBytes(),"AES");
    Cipher c = Cipher.getInstance("AES/ECB/ZeroBytePadding"); // Change to CBC and use appropriate IV
    c.init(Cipher.ENCRYPT_MODE, sks);
    c.update(message.getBytes());
    byte[] ciphertext = c.doFinal();
    Log.i("CE", new String(ciphertext));

    } catch (NoSuchAlgorithmException e) {
        Log.e("CE",e.getMessage());
    } catch (NoSuchPaddingException e) {
        Log.e("CE",e.getMessage());
    } catch (InvalidKeyException e) {
        Log.e("CE",e.getMessage());
    } catch (IllegalBlockSizeException e) {
        Log.e("CE",e.getMessage());
    } catch (BadPaddingException e) {
        Log.e("CE",e.getMessage());
}

答案 1 :(得分:0)

您不需要手动执行任何操作,因为Android具有您需要的所有库(通过JCE),可以轻松地执行此操作。

我在这里发布了一些针对Android应用编写的AES加密代码:http://pocket-for-android.1047292.n5.nabble.com/Encryption-method-and-reading-the-Dropbox-backup-td4344194.html#a4454327

您可能需要注意填充方案,在我的例子中是PKCS5Padding。