11

我正在使用充气城堡提供程序进行 AES 加密。我需要从 bc 和我的罐子创建一个胖罐子,但是一旦我这样做,我就会得到算法未找到异常。是否可以摆脱标志并从中创建常规罐子?

我的构建过程是..

  • 我将所有 jar 解压缩到我的构建目录中。
  • 然后删除 META-INF 目录
  • 编译我的应用程序
  • 用蚂蚁罐子

当我尝试使用时出现错误

SecretKeyFactory.getInstance(算法);

算法是来自充气城堡的 PBEWITHSHA256AND128BITAES-CBC-BC。

4

6 回答 6

19

要从 jar 文件中删除签名,请从中删除META-INF目录。jar 文件是一个 zip 文件,因此在 Linux 上您可以这样做:

zip -d file.jar 'META-INF/*.SF' 'META-INF/*.RSA'
于 2015-09-17T06:09:03.947 回答
12

当您签署 jar 文件时,新文件会添加到 META-INF 目录中,例如“MKSIGN.SF”和“MKSIGN.DSA”。只需从 jar 文件中删除它们(使用任何 zip 实用程序),您就可以将其未签名。

于 2009-08-18T05:41:16.733 回答
0

您必须从签名的 jar 中删除签名文件。将其扩展名更改为 zip,删除签名文件,然后更改回 jar。从现在开始,这个 jar 不再是未签名的。

于 2013-06-12T11:38:16.400 回答
0

您可能会遇到 Bouncy Castle jar 的特定问题。Bouncy Castle 实现了 Cryptographic Service Provider 接口,因此可能会使用Java 文档技术说明中介绍的自我验证技术。

在 Bouncy Castle 的情况下,“胖罐”技术可能是不可能的。您可以使用另一种类加载方法,从您自己的 jar 中加载完整的充气城堡 jar(使用带有 URLClassLoader 的 jar://path/to/jar!/path/within/jar 语法)但我没有尝试过这和我不适合您的需求。

于 2019-10-04T17:59:18.847 回答
0

我按照 maven jar signer 插件中的代码删除了所有签名文件以及 MANIFEST.MF 中的校验和:

find -type f \( \( -name "*.RSA" -o -name "*.SF" \) -o \( -name "*.EC" -o -name "*.DSA" \) \) -print0 | xargs -0 --no-run-if-empty rm -rf
sed -i '/^Name: .*.class/Q' MANIFEST.MF
于 2018-03-14T10:07:49.717 回答
-1

我整理了一个 perl 脚本,我在生产中使用它来删除 JAR 签名。只需将带有 jar 的文件夹作为参数传递即可。这适用于linux。虽然我没有在 Windows 中测试过,但它可能适用于 cygwin。

https://docs.google.com/document/d/1B1uEUIiiuxh7WdPldD9rUun3COAefjczfdJTMWEecE1g/edit?usp=sharing

于 2013-10-15T19:34:06.640 回答