首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Android使用CFB

Android使用CFB
EN

Stack Overflow用户
提问于 2014-04-15 22:59:32
回答 1查看 143关注 0票数 0

我正在尝试用AES和CFB对我的字符串进行编码。如果我这样做了

代码语言:javascript
复制
Cipher cipher = Cipher.getInstance("AES/CFB/NoPadding");

,它运行良好。但是如果我使用"AES/CFB/NoPadding“而不是"AES",那么具有相同密码的相同字符串是不同的。以下是我的代码:

代码语言:javascript
复制
SecretKeySpec key = new SecretKeySpec(cryptPassword.getBytes(), "AES");

        byte[] cryptByte = cryptString.getBytes("UTF8"); 

        Cipher cipher = Cipher.getInstance("AES/CFB/NoPadding");

        cipher.init(Cipher.ENCRYPT_MODE, key);
        byte[] hans = cipher.doFinal(cryptByte);


        cryptString = Base64.encodeToString(hans,Base64.DEFAULT);

有人能帮我吗?非常感谢!

EN

回答 1

Stack Overflow用户

发布于 2014-04-16 14:09:07

假设问题是关于Cipher.getInstance("AES")Cipher.getInstance("AES/CFB/NoPadding")的区别

当您没有在转换字符串中指定它们时,对于Oracle JDK the default mode/padding来说是“ECB/PKCS5Padding.”,这意味着Cipher.getInstance("AES")Cipher.getInstance("AES/ECB/PKCS5Padding")相同。

使用AES/ECB/PKCS5Padd对某些数据进行编码的结果与使用AES/CFB/NoPadding对相同数据进行编码的结果是可以预见的不同。

为了最大限度地减少混淆,您应该始终使用显式模式和填充值指定完整转换。

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

https://stackoverflow.com/questions/23087482

复制
相关文章

相似问题

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