2017-02-16 61 views
1

通常,PSSPKCS1v15都可用於RSA簽名填充。
而對於java代碼也很簡單,但它不能說明使用的填充策略。
我的代碼:SunJCE使用什麼填充策略SHA1WithRSA

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

我可以明確地定義PSSMGF1如使用了SunJCE作爲供應商的填充策略?

+0

我有測試它使用'PKCS1v15'作爲填充策略,但仍不知道'SunJCE'是否支持'PSS'。 – xuanzhui

回答

1

PSS未出現在支持的算法列表SunJCE中。然而SHA256withRSA/PSSandroid中執行。

我建議在PKCS#1 v2.1使用BouncyCastle的

Security.addProvider(new BouncyCastleProvider()); 

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

修訂

默認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); 
+0

你是對的,這是不需要的。謝謝 – pedrofb

+0

我還沒有看到任何'MGF1'的標誌,是默認的嗎? – xuanzhui

0

通過回答啓發,只是增加一個片段,展示瞭如何手動設置所有的參數,可以,當然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();