繁体   English   中英

如何用Java中的文件验证数字签名?

[英]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。

我使用Demoiselle Framework在我的项目中解决了这个问题。

特别是签名人部分

也许这段代码也可以为您提供帮助

例如:

```的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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM