2

我一直在开发一种使用 AES-256 加密来写入文件的软件。我正在使用Eclipse 64 位和 JDK7。问题是当我编译和执行代码时,它可以完美地工作,加密和解密算法。当我打包 Runnable JAR 并运行它时,它也可以正常工作......但是当我使用 Advanced Installer 9.4 将Runnable JAR打包到 Windows 可执行文件 (.exe) 时,安装它(W7 32 位和 64 位).. .a NoSuchProviderException弹出,任何东西都被加密/解密。

我需要将此软件分发给许多用户,但找不到运行 .exe 的方法

public static String AES_Encode(String str, String key) throws Exception {

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

    SecretKeySpec secretKey = new SecretKeySpec(key.getBytes("UTF-8"), "AES");

    cipher.init(Cipher.ENCRYPT_MODE, secretKey);

    String encryptedString = Base64.encodeBase64String(cipher.doFinal(str.getBytes("UTF-8")));

    return encryptedString;


}

public static String AES_Decode(String str, String key) throws Exception {

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

    SecretKeySpec secretKey = new SecretKeySpec(key.getBytes("UTF-8"), "AES");

    cipher.init(Cipher.DECRYPT_MODE, secretKey);

    String decryptedString = new String(cipher.doFinal(Base64.decodeBase64(str)),"UTF-8");

    return decryptedString;

}

当我在 Windows 中运行该软件后,我试图显示可用的提供程序,但SunJCE 或 JCE不可用;尽管它们是在我运行 JAR 或编译后的代码时出现的。有什么我可以做的吗?我可以切换到充气城堡吗?如何(我需要在我的项目中集成什么 JAR 或类似文件?)

感谢您的时间和帮助!

4

1 回答 1

1

问题是 Advanced Installer 中的项目被配置为压缩 Pack200 中包含的 JAR,这破坏了部分 JAR 的数字签名。

解决方案是完全禁用 Pack200 压缩,或者转到 Advanced Installer 中的“主应用程序菜单 -> 选项 -> 外部工具”,然后在出现的对话框中指定您从应用程序中定位的 JDK 的安装路径。(最后一种方法将允许高级安装程序检查压缩 JAR 的数字签名,检测哪个签名被破坏并自动跳过压缩这些 JAR,但仍然压缩包的其他内容)。

于 2014-04-29T07:53:21.883 回答