我们需要编写一些 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 代码中。只是您可能在使用默认拉丁语的 Windows 上运行它(ISO_8859_1
) 字符集,并且 Android 默认使用 UTF-8。它还取决于用于打印字符的控制台和字体。在这种情况下,所使用的填充可能不会打印在 Windows 控制台上,而是打印在 Android 代码上。
您需要查看字节数组(例如十六进制)以找出使用了哪个填充,然后在将明文转换为字符串之前将其剥离。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)