【发布时间】:2011-07-16 20:23:14
【问题描述】:
我有一个 Android 应用程序,它使用 javax.crypto 加密文件中的一些文本数据。加密实现类似于this。该应用程序可以很好地处理它之前创建的加密数据。
现在,我几乎将我的 Android 应用程序移植到桌面 (JFace/SWT)。我对移植的应用程序使用相同的加密实现,因为它不依赖于任何 Android 特定的 API。移植的应用程序可以很好地处理它创建的加密数据。
问题是桌面应用程序无法解密使用 Android 应用程序保存的数据。 Android 应用程序无法解密数据,该数据也与桌面应用程序一起保存。我仔细检查了纯数据和密码的字节流,以便在两个平台上进行加密。它们是相同的,因此文本编码左右没有问题。但是加密程序在不同的平台上返回不同的加密结果,即使输入数据是字节到字节的。
Java 加密 API 是否保证在不同平台上进行相同的操作?加密提供程序(在我的情况下为 AES/128 位)是否应该在 Android、Linux 和 Windows 上以相同的方式工作?有没有办法调整javax.crypto 以获得在不同平台上的互操作性?
【问题讨论】:
-
加密算法非常明确。如果输入逐字节相同,并且 Java 加密方法调用相同,则输出字节不应该有差异。
-
如果您显示您用于加密/解密的代码,我们可能会显示问题点。
-
你在指责 API,但我敢打赌这是你程序中的错误。
-
Paŭlo,如果您单击问题中的链接,您可以看到代码。实际代码与它非常相似。 GregS,我不是在责怪 API。目前,我发现不同的提供程序在 Android 和桌面上用于 AES 和 SHA1PRNG 算法。我看到在不同平台上为相同的密码生成了不同的安全密钥。我正在尝试将桌面应用程序切换到在 Android 上使用的提供程序。
标签: java interop cryptography