繁体   English   中英

SunJCE SHA1WithRSA使用什么填充策略

[英]what padding strategy is used by SunJCE SHA1WithRSA

通常, PSSPKCS1v15均可用于RSA签名填充。
对于Java而言,代码也很简单,但是却无法说明所使用的填充策略。
我的代码:

Signature signature = Signature.getInstance("SHA1WithRSA");
signature.initSign(privateKey);
signature.update(plainBytes);
byte[] signBytes = signature.sign(); 

我可以使用SunJCE作为提供者,将MGF1 PSS明确定义为填充策略吗?

PSSSunJCE的受支持算法列表中不存在。 但是SHA256withRSA/PSS是在android中实现的。

我建议使用BouncyCastle

Security.addProvider(new BouncyCastleProvider());

Signature sig = Signature.getInstance("SHA1withRSA/PSS");
sig.initSign(privateKey);
sig.update(data);
byte[] signature = sig.sign();

更新

PKCS#1 v2.1中的默认maskGenAlgorithm为MGF1。

 RSASSA-PSS-params ::= SEQUENCE { hashAlgorithm [0] OAEP-PSSDigestAlgorithms DEFAULT sha1, maskGenAlgorithm [1] PKCS1MGFAlgorithms DEFAULT mgf1SHA1, saltLength [2] INTEGER DEFAULT 20, trailerField [3] INTEGER DEFAULT 1 } 

我认为BouncyCastle正在使用它。 您可以定义自己的PSS参数。 例如(请参阅PSSParameterSpec

sig.setParameter(PSSParameterSpec.DEFAULT);

受到答案的启发,只需添加一个片段,说明如何手动设置所有参数,当然必须使用BouncyCastle

Signature signature = Signature.getInstance("SHA256WithRSA/PSS", "BC"); //second param "BC" is not really required
MGF1ParameterSpec mgf1ParameterSpec = new MGF1ParameterSpec("SHA-256"); 
PSSParameterSpec pssParameterSpec = new PSSParameterSpec("SHA-256", "MGF1", mgf1ParameterSpec , 20, 1);
signature.setParameter(pssParameterSpec);
signature.initSign(privateKey);
signature.update(plainBytes);
byte[] signBytes = signature.sign();

谢谢@xuanzhui

这是我成功验证(十六进制编码)签名的方式:

public static boolean verify(String plainText, String signature, PublicKey publicKey) throws Exception {
    Signature publicSignature = Signature.getInstance("SHA512withRSA/PSS");
    publicSignature.setParameter(new PSSParameterSpec("SHA-512", "MGF1", MGF1ParameterSpec.SHA512 , 64, 1));
    publicSignature.initVerify(publicKey);
    publicSignature.update(plainText.getBytes(UTF_8));

    return publicSignature.verify(hexToBytes(signature));
}

请注意,尽管文档中另有说明( getSaltLength() -“以位为单位返回盐长度”),盐长度似乎以字节为单位

另外,我认为“ SHA512withRSA / PSS”仅受Android 23+支持

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

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