首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Android AES加密零填充

Android AES加密零填充
EN

Stack Overflow用户
提问于 2011-07-30 03:01:26
回答 2查看 11.5K关注 0票数 3

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

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

我使用的是Cipher类,我知道应该使用"AES/CBC/“,但我不知道是否有一个填充方法可以描述我想要的内容。

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

EN

回答 2

Stack Overflow用户

发布于 2011-09-02 03:25:13

我不确定您是否已经解决了问题,但我认为您要查找的填充类型是ZeroBytePadding.此代码适用于我在2.3.3模拟器上运行:

代码语言:javascript
复制
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());
}
票数 2
EN

Stack Overflow用户

发布于 2011-07-30 04:57:20

您不需要手动执行任何操作,因为Android拥有您需要的所有库(通过JCE)来轻松完成此操作。

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

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6877758

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档