编译证书验证程序时出错

时间:2015-07-07 10:46:00

标签: java digital-signature pkcs#7

我想在IntelliJ IDE中编译this程序。但它返回以下三个错误:

1.对于这一行:

CertStore certs = s.getCertificatesAndCRLs("Collection", "BC");

此错误:

error: cannot find symbol method getCertificatesAndCRLs(String,String)

2.对于这一行:

Collection certCollection = certs.getCertificates(signer.getSID());

此错误:

error: method getCertificates in class CertStore cannot be applied to given types;
required: CertSelector
found: SignerId
reason: actual argument SignerId cannot be converted to CertSelector by method invocation conversion

3.对于此行:

if (signer.verify(cert.getPublicKey(), "BC")) verified++;

此错误:

error: method verify in class SignerInformation cannot be applied to given types;
required: SignerInformationVerifier
found: PublicKey,String
reason: actual and formal argument lists differ in length

这些是我的导入程序的首要任务:

import java.io.*;
import java.util.*;
import java.security.*;
import java.security.Security;
import java.security.cert.*;
import org.bouncycastle.jce.provider.BouncyCastleProvider;
import org.bouncycastle.cms.*;

我将jdk1.7.0_15个库+ bcpkix-jdk15on-151.jarbcprov-jdk16-1.45.jar添加到我的项目中。

有人可以帮我解决这个问题吗?

1 个答案:

答案 0 :(得分:0)

请按照以下步骤操作。希望它能帮到你,因为它经过测试。

步骤01:
从文件读取字节数组或将数据对象转换为字节数组。
示例代码:

FileInputStream fis = new FileInputStream(file);
byte fileContent[] = new byte[(int)file.length()];
fis.read(fileContent);

第2步:
从字节数组创建CMSSignedData对象。
示例代码:

CMSSignedData data = new CMSSignedData(fileContent);

步骤03:
从CMSSignedData获取CertStore。
示例代码:

CertStore certs = data.getCertificatesAndCRLs("Collection", "BC");

请务必先在安全性中添加BouncyCastleProvider:

Security.addProvider(new BouncyCastleProvider());'

步骤04:
使用签名者信息获取证书集合。
示例代码:

SignerInformation signer = (SignerInformation) i.next();
Collection<? extends Certificate> certCollection = certs.getCertificates(signer.getSID());

步骤05:
验证签名者对每个证书的签名。
示例代码:

if (signer.verify(new JcaSimpleSignerInfoVerifierBuilder().setProvider("BC").build(cert)) ) 
{   
     }



请检查一下,为了完成您的目标,您已经完成了上述步骤。

我猜,要么是从错误的数据输入中创建CMSSignedData,要么依赖库是相互冲突的(最可能的原因)。我使用 bcprov-jdk16-1.46.jar bcmail-jdk16-1.46.jar 来完成所有任务。