Android AES 加密零填充

标签 android aes padding

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

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

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

编辑: 最后一个字节应该是最后 16 字节填充单元格中有多少字节是真实数据。

最佳答案

不确定您是否已经解决了您的问题,但我认为您正在寻找的填充类型是 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());
}

关于Android AES 加密零填充,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6877758/

相关文章:

java - Android中解析动态json对象

android - 即使在 android 2.3 中也无法看到印度语言字符

perl - 使用blowfish 或AES 在Perl 中加密/解密二进制文件?

android - 负填充的影响

php - 我如何将我的 Android 设备(不是模拟器)连接到 wamp 服务器?

android - 如何检测抽屉导航外的触摸事件

c# - 使用 .NET AES-Encrypt-then-MAC 大文件

javascript - Java 和 Javascript 之间的加密和解密将不起作用

jQuery width() 动画创建填充(可能是 CSS 问题)

image - 为 4 channel 图像中的对象添加填充