在.exe中打包时出现AES 256加密/解密NoSuchProviderException(使用Advanced In



我一直在开发一个使用AES-256加密来编写文件的软件。我使用Eclipse64位和JDK7。问题是,当我编译和执行代码时,它可以完美地工作,包括加密和解密算法。当我打包一个Runnable JAR并运行它时,它也很好。。。但是,当我用Advanced Installer 9.4将可运行JAR打包到Windows可执行文件(.exe)中时,请安装它(W7 32位和64位)。。。一个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或编译的代码时出现的。我能做什么吗?我可以换到Bouncy Castle吗?如何(我需要在我的项目中集成什么JAR或类似的东西?)

感谢您的时间和帮助!

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

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

相关内容

  • 没有找到相关文章

最新更新