如何使“ MessageDigest SHA-256和签名RSASSA-PSS”等效于“ Signature SHA256withRSA / PSS”

徐糖:

我想分两步制作SHA256withRSA / PSS签名,首先我对消息进行哈希处理,然后使用RSASSA-PSS签名摘要

    byte[] document =   {0, 1, 2, 3, 4, 5, 6, 7, 7, 6, 5, 4, 3, 2, 1};
    MessageDigest digestor256 = MessageDigest.getInstance("SHA256", "BC");
    byte[] documentDigest256 = digestor256.digest(document);

    DigestAlgorithmIdentifierFinder hashAlgorithmFinder = new faultDigestAlgorithmIdentifierFinder();
    AlgorithmIdentifier hashingAlgorithmIdentifier256 = hashAlgorithmFinder.find("SHA256");

    DigestInfo digestInfo2 = new DigestInfo(hashingAlgorithmIdentifier256, documentDigest256);
    Signature s2 = Signature.getInstance("NONEwithRSASSA-PSS", "BC");
    MGF1ParameterSpec mgfParam = new MGF1ParameterSpec("SHA256");
    PSSParameterSpec pssParam = new PSSParameterSpec("SHA256", "MGF1", mgfParam, 32, 1);
    s.setParameter(pssParam);
    s.initSign(keyPair.getPrivate());
    s.update(digestInfo2.getEncoded());
    byte[] signature = s.sign();

但是我使用SHA256withRSA / PSS无法验证

    Signature ver = Signature.getInstance("SHA256withRSA/PSS", "BC");
    ver.setParameter(pssParam);
    ver.initVerify(keyPair.getPublic());
    ver.update(document);
    boolean re = ver.verify(signature);

我需要一些帮助,谢谢您的帮助。

dave_thompson_085:

不要做DigestInfo。RSASSA-PKCS1v1_5签名使用在ASN.1 DER DigestInfo中对哈希进行编码的步骤,但RSASSA-PSS签名则不这样做。参见RFC 3447或8017。同样,您不需要使用组合算法在版本上指定参数,因为默认值已经正确,尽管这样做不会有多余的麻烦。修改示例以使用我的密钥对,并输出到控制台:

    KeyStore ks = KeyStore.getInstance("jks"); ks.load(new FileInputStream(args[0]), args[1].toCharArray());
    PrivateKey prv = (PrivateKey)ks.getKey(args[2], args[1].toCharArray()); 
    PublicKey pub = ks.getCertificate(args[2]).getPublicKey();

    byte[] document =   {0, 1, 2, 3, 4, 5, 6, 7, 7, 6, 5, 4, 3, 2, 1};
    MessageDigest digestor256 = MessageDigest.getInstance("SHA256", "BC");
    byte[] documentDigest256 = digestor256.digest(document);

    Signature s2 = Signature.getInstance("NONEwithRSASSA-PSS", "BC");
    MGF1ParameterSpec mgfParam = new MGF1ParameterSpec("SHA256");
    PSSParameterSpec pssParam = new PSSParameterSpec("SHA256", "MGF1", mgfParam, 32, 1);
    s2.setParameter(pssParam);
    s2.initSign(prv);
    s2.update(documentDigest256);
    byte[] signature = s2.sign();

    Signature ver = Signature.getInstance("SHA256withRSA/PSS", "BC");
    if(false){ ver.setParameter(pssParam); } // can enable if desired
    ver.initVerify(pub);
    ver.update(document);
    System.out.println( ver.verify(signature) );

同样,琐碎地,您将拼写错误DefaultDigestAlgorithmIdentifierFinder在变量名中使用了s2vs。s

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

使用SHA256withRSA签名后如何验证signatureBytes?

使用SHA-256 .Net 4.5支持的不带参数的RSASSA-PSS

如何在PHP上将hash_hmac()与“ SHA256withRSA”一起使用?

PHP的SHA256withRSA标志从JAVA进行验证

SHA256withRSA的作用和顺序是什么?

兩步創建SHA256withRSA

SHA256withRSA和SHA256然后RSA之间的区别

是否可以使用原始数据的 SHA256 哈希验证 SHA256withRSA 签名?

.Net C#上的Java匹配SHA256withRSA签名失败

在Python中使用SHA256withRSA进行数字签名验证失败

在Python中使用SHA256withRSA进行数字签名验证失败

nodejs中的SHA256withRSA签名验证每次均返回false

尝试将Java RSA-PSS签名验证码(带有SHA256哈希,SHA1 MGF哈希)转换为Python

如何在Java中正确使用RSASSA-PSS签名?

X509Certificate2,具有使用SHA256withRSA的私钥签名数据

将SHA1和RSA与java.security.Signature和MessageDigest和Cipher结合使用

调用MessageDigest.getInstance(“ SHA256”)时发生异常

mvn原型:创建SHA-256 MessageDigest不可用

如何使JAVA验证OpenSSL RSA / PSS签名

R等效于Python的hashlib.sha256函数

无法通过Python验证RSASSA-PSS签名-> Go

如何使用RSA SHA-256哈希对JWT进行签名

Android / Python如何使用RSA和PKCS1填充来验证签名SHA256

如何使用SHA256和X.509正确签名XML?

通过MailKit使用RSASSA-PSS和RSAES-OAEP

如何获得SHA256证书指纹?

如何更新Homebrew SHA256?

如何检查 sha256 哈希?

MessageDigest SHA-512与openssl不同