Android使用CFB

时间:2014-04-15 14:59:32

标签: java android encryption aes

我正在尝试使用AES和CFB对我的String进行编码。如果我这样做

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

,它工作正常。但如果我使用“AES / CFB / NoPadding”而不是“AES”,那么具有相同密码的相同String是不同的。这是我的代码:

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

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

1 个答案:

答案 0 :(得分:0)

假设问题是关于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 / PKCS5Padding对某些数据进行编码的结果与使用AES / CFB / NoPadding对相同数据进行编码有所不同。

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