我有一个使用BouncyCastle进行CMS签名的.zip文件
CMSSignedDataGenerator cmsGenerator = new CMSSignedDataGenerator();
ContentSigner contentSigner = new JcaContentSignerBuilder("SHA256withRSA").build(signingKey);
cmsGenerator.addSignerInfoGenerator(new JcaSignerInfoGeneratorBuilder(
new JcaDigestCalculatorProviderBuilder()
.setProvider("BC")
.build()
).build(contentSigner, signingCertificate));
cmsGenerator.addCertificates(certs);
CMSSignedData cms = cmsGenerator.generate(data, true);
signedMessage = cms.getEncoded();
return signedMessage;
但是,以这种方式,生成的字节的zip条目不容易通过常规zip工具提取(需要额外的转换步骤),而如果使用OpenSSL,则可以将其提取:
openssl cms -sign -inkey key -signer key -nodetach -binary -in data.zip -out out.zip.p7 -outform DER
这里out.zip.p7可以通过zip工具解压缩,而在BouncyCastle的情况下,zip工具在解压缩时会给出“在zip文件的开头或内部额外增加70个字节。zip文件偏移不正确(本地标头sig):70” 。
使用BouncyCastle时,我在这里缺少什么?需要由OpenSSL生产的版本,因为在解压缩之前不需要PKCS7转换为zip。
顺便说一下,我正在使用Apache的commons-compress来生成zip文件。
为了获得类似的输出,应将编码类型指定为“ DER”。