[英]How to verify digital signature with a file in Java?
我是密码学的完整初学者。 我有2个文件-其中一个是数字签名(p7s,signedData)和应该用来验证签名的文件。 问题是如何使用Java做到这一点? 首先我以为我可以这样
String rawString = ASN1ObjectIdentifier.fromByteArray(bytesArray).toString();
String rawStringForSurname = rawString.substring(rawString.indexOf("2.5.4.4,") + 9, rawString.length());
String signSurname = rawStringForSurname.substring(0, rawStringForSurname.indexOf("]"));
String rawStringForGivenName = rawString.substring(rawString.indexOf("2.5.4.42,") + 10, rawString.length());
String signGivenName = rawStringForGivenName.substring(0, rawStringForGivenName.indexOf("]"));
显然,这很糟糕。 我的输入数据仅打算具有一个文件(p7s文件,该文件随后被解码为ASN.1,并使用作者的名字和全名(来自外部的数据,字符串)验证)。 出乎意料的是,我应该有一个文件,我也应该使用它来验证符号。 我知道有一个奇怪的哈希码逻辑(该文件是完整的,并且符号与该文件完全相关)。 问题是如何从文件和签名中检索此数据? 为了接受或拒绝它,我应该比较什么呢? 我使用的图书馆是Bouncy Castle。
特别是签名人部分
例如:
```的java
package stackoverflow.my.pack;
import java.nio.file.Path;
import java.security.PrivateKey;
import java.security.cert.X509Certificate;
import java.util.Arrays;
import org.bouncycastle.asn1.x509.Certificate;
import org.demoiselle.signer.policy.engine.factory.PolicyFactory.Policies;
import org.demoiselle.signer.policy.impl.cades.factory.PKCS7Factory;
import org.demoiselle.signer.policy.impl.cades.pkcs7.PKCS7Signer;
public class MySigner {
private static PKCS7Signer signerLoader() {
PKCS7Signer signer = PKCS7Factory.getInstance().factoryDefault();
PrivateKey pk = MyReader.getPrivateKey();// Create some method to get your PK
signer.setPrivateKey(pk);
X509Certificate certificate = MyReader.getMyPublicKey();// Create some method to get your Pub
signer.setCertificates((Certificate[]) Arrays.asList(certificate).toArray());
if (is2048(privateKey)) {
signer.setSignaturePolicy(Policies.AD_RB_CADES_2_2);
} else {
signer.setSignaturePolicy(Policies.AD_RB_CADES_1_1);
}
return signer;
}
public static byte[] myMethodToSign(byte[] fileToBeSigned) throws MySignerException {
PKCS7Signer signer = signerLoader();
return signer.doHashSign(fileToBeSigned);
}
}
```
闺女也使用BouncyCastle,您可以看到他们的签名方法来帮助您。 您必须加载PK,将BouncyCastle添加为提供程序,获取SignPolicy信息,验证证书链,获取数据生成器并构建属性表。 闺女的方式。
如果您想查看使用其签名者的示例: https : //github.com/demoiselle/signer/blob/master/signer-examples/src/main/java/org/demoiselle/signer/signer/examples/Signer。 java的
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.