java - 在Android上解密 "SunJCE"AES加密数据

标签 java android encryption cryptography aes

我们需要编写一些 Android 代码来解密从我们的服务器发送的一些数据。我们的服务器团队为我们提供了一些使用“SunJCE”提供程序的示例解密代码,不幸的是,Android 上不存在该提供程序。

Cipher cipher = Cipher.getInstance("AES/CBC/NoPadding", "SunJCE");

有人知道在 Android 上实现这个的最干净的方法吗?如果我们在 Android 上尝试这个

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

然后看起来一些不需要的垃圾出现在解密文本的末尾,例如:

ComparisonFailure: expected:<...lAAAAABJRU5ErkJggg==[]> but was:<...lAAAAABJRU5ErkJggg==[��������]>    

我们在 Android Cipher 类中尝试了很多不同转换的组合(例如“AES/CBC/PKCS5Padding”),但总是遇到 BadPaddingExceptions 之类的问题。

我们还能够使用纯 Java 模块解密此数据,该模块似乎没有显示相同的垃圾字符。有没有办法只使用 Android 类来做到这一点?

最佳答案

Java 代码中也存在同样的垃圾。只是您可能在使用默认拉丁语 (ISO_8859_1) 字符集的 Windows 上运行此程序,而 Android 默认使用 UTF-8。它还取决于用于打印字符的控制台和字体。在这种情况下,所使用的填充可能不会在 Windows 控制台上打印,但会在 Android 代码上打印。

您需要查看字节数组(例如十六进制)以找出使用了哪个填充,然后在将明文转换为字符串之前将其删除。

关于java - 在Android上解密 "SunJCE"AES加密数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34402933/

相关文章:

android - 在我的Android应用程序中将Youtube Player与硬代码视频ID结合使用

Java编译时接口(interface)变化

android - 您尚未接受许可协议(protocol)。[Android SDK Platform 23]

java - 如何向Dataframe添加一些信息?

java - 将 Java HashMap<K,V> 转储到 XML 并返回

java - Java 中的 RSA BadPaddingException - 在 Android 中加密在 JRE 中解密

java - 在 Java 中验证 Paypal Restful Webhook 签名

iphone - 如何在 iPhone 上打开加密的 SQLITE 数据库?

Java 作业 : setVisible import

java - 如何创建一个使用数组来计算元音的程序?