本文介紹了更改BouncyCastle PSS參數(shù)中的鹽分長(zhǎng)度和參數(shù)(&Q)的處理方法,對(duì)大家解決問(wèn)題具有一定的參考價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)吧!
問(wèn)題描述
我想簽署一封郵件。
我使用的是BouncyCastle(更準(zhǔn)確地說(shuō),是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();
在嘗試用另一臺(tái)設(shè)備(和另一種技術(shù))檢查簽名時(shí),我注意到”saltLength”不是‘512’,而是‘32’。
更重要的是,如果我修改PSSParameterSpec
構(gòu)造函數(shù),那也無(wú)關(guān)緊要,即使我不使用instance.setParameter(pssParameterSpec)
。
看起來(lái)instance.setParameter(pssParameterSpec)
什么也不做。
這正常嗎?
您知道如何更改”Salt_Long”的值嗎?
推薦答案
百思不得其解后,似乎initSign
/initVerify
和setParameter
的順序在安卓上很重要。
使用相同的算法(在我的例子中沒(méi)有BouncyCastle)需要在初始化后設(shè)置參數(shù),否則使用默認(rèn)值:
signature.initVerify(publicKey);
signature.setParameter(new PSSParameterSpec(...));
這當(dāng)然引發(fā)了更多關(guān)于可移植性的問(wèn)題。我設(shè)法找到的唯一線(xiàn)索是JDK bug report,盡管在我的情況下,在兩種情況下都選擇了相同的提供程序,并且在初始化之前設(shè)置參數(shù)時(shí)仍然失敗。
這篇關(guān)于更改BouncyCastle PSS參數(shù)中的鹽分長(zhǎng)度和參數(shù)(&Q)的文章就介紹到這了,希望我們推薦的答案對(duì)大家有所幫助,