如何用Java文件验证数字签名?
我是密码学领域的初学者。我有两个文件-其中一个是数字签名(p7s,signedData)和我应该验证签名的文件。问题是如何使用Java实现这一点?首先我想我可以这样做如何用Java文件验证数字签名?,java,hash,cryptography,digital-signature,asn.1,Java,Hash,Cryptography,Digital Signature,Asn.1,我是密码学领域的初学者。我有两个文件-其中一个是数字签名(p7s,signedData)和我应该验证签名的文件。问题是如何使用Java实现这一点?首先我想我可以这样做 String rawString = ASN1ObjectIdentifier.fromByteArray(bytesArray).toString(); String rawStringForSurname = rawString.substring(rawString.indexOf("2.5.4.4,") + 9, raw
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,并用作者的(外部数据,字符串)验证姓氏和全名)。令人惊讶的是,事实证明,我应该有一个文件,我应该验证签名以及。我知道有奇怪的hashcode逻辑(该文件是完整的,符号与该文件完全相关)。问题是如何从文件中检索此数据并进行签名?为了接受或拒绝它,我到底应该比较什么?我使用的库是Bouncy Castle。我在项目中使用它来解决这个问题。
尤其是
也许这部分代码也能帮助你
例如:
```爪哇
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);
}
}
```
Demoiselle也使用BouncyCastle,你可以看到他们的符号方法来帮助你。
您必须加载您的PK,添加BouncyCastle作为您的提供者,获取您的SignPolicy信息,验证证书链,获取数据生成器并构建属性表。
如果您想查看使用其签名者的示例: