我正在使用充气城堡提供程序进行 AES 加密。我需要从 bc 和我的罐子创建一个胖罐子,但是一旦我这样做,我就会得到算法未找到异常。是否可以摆脱标志并从中创建常规罐子?
我的构建过程是..
- 我将所有 jar 解压缩到我的构建目录中。
- 然后删除 META-INF 目录
- 编译我的应用程序
- 用蚂蚁罐子
当我尝试使用时出现错误
SecretKeyFactory.getInstance(算法);
算法是来自充气城堡的 PBEWITHSHA256AND128BITAES-CBC-BC。
我正在使用充气城堡提供程序进行 AES 加密。我需要从 bc 和我的罐子创建一个胖罐子,但是一旦我这样做,我就会得到算法未找到异常。是否可以摆脱标志并从中创建常规罐子?
我的构建过程是..
当我尝试使用时出现错误
SecretKeyFactory.getInstance(算法);
算法是来自充气城堡的 PBEWITHSHA256AND128BITAES-CBC-BC。
要从 jar 文件中删除签名,请从中删除META-INF
目录。jar 文件是一个 zip 文件,因此在 Linux 上您可以这样做:
zip -d file.jar 'META-INF/*.SF' 'META-INF/*.RSA'
当您签署 jar 文件时,新文件会添加到 META-INF 目录中,例如“MKSIGN.SF”和“MKSIGN.DSA”。只需从 jar 文件中删除它们(使用任何 zip 实用程序),您就可以将其未签名。
您必须从签名的 jar 中删除签名文件。将其扩展名更改为 zip,删除签名文件,然后更改回 jar。从现在开始,这个 jar 不再是未签名的。
您可能会遇到 Bouncy Castle jar 的特定问题。Bouncy Castle 实现了 Cryptographic Service Provider 接口,因此可能会使用Java 文档技术说明中介绍的自我验证技术。
在 Bouncy Castle 的情况下,“胖罐”技术可能是不可能的。您可以使用另一种类加载方法,从您自己的 jar 中加载完整的充气城堡 jar(使用带有 URLClassLoader 的 jar://path/to/jar!/path/within/jar 语法)但我没有尝试过这和我不适合您的需求。
我按照 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
我整理了一个 perl 脚本,我在生产中使用它来删除 JAR 签名。只需将带有 jar 的文件夹作为参数传递即可。这适用于linux。虽然我没有在 Windows 中测试过,但它可能适用于 cygwin。
https://docs.google.com/document/d/1B1uEUIiiuxh7WdPldD9rUun3COAefjczfdJTMWEecE1g/edit?usp=sharing