本文介紹了更改BouncyCastle PSS參數中的鹽分長度和參數(&Q)的處理方法,對大家解決問題具有一定的參考價值,需要的朋友們下面隨著小編來一起學習吧!
問題描述
我想簽署一封郵件。
我使用的是BouncyCastle(更準確地說,是Android版本SpongyCastle)。
我的代碼如下:
Signature instance = Signature.getInstance("SHA256withRSA/PSS", "BC");
MGF1ParameterSpec mgf1ParameterSpec = new MGF1ParameterSpec("SHA-256");
PSSParameterSpec pssParameterSpec = new PSSParameterSpec("SHA-256", "MGF1",mgf1ParameterSpec , 512, 1);
instance.setParameter(pssParameterSpec);
instance.initSign(privateKey);
instance.update(msg.getBytes());
byte[] signature = instance.sign();
在嘗試用另一臺設備(和另一種技術)檢查簽名時,我注意到”saltLength”不是‘512’,而是‘32’。
更重要的是,如果我修改PSSParameterSpec
構造函數,那也無關緊要,即使我不使用instance.setParameter(pssParameterSpec)
。
看起來instance.setParameter(pssParameterSpec)
什么也不做。
這正常嗎?
您知道如何更改”Salt_Long”的值嗎?
推薦答案
百思不得其解后,似乎initSign
/initVerify
和setParameter
的順序在安卓上很重要。
使用相同的算法(在我的例子中沒有BouncyCastle)需要在初始化后設置參數,否則使用默認值:
signature.initVerify(publicKey);
signature.setParameter(new PSSParameterSpec(...));
這當然引發了更多關于可移植性的問題。我設法找到的唯一線索是JDK bug report,盡管在我的情況下,在兩種情況下都選擇了相同的提供程序,并且在初始化之前設置參數時仍然失敗。
這篇關于更改BouncyCastle PSS參數中的鹽分長度和參數(&Q)的文章就介紹到這了,希望我們推薦的答案對大家有所幫助,