1
我用下面的代碼,以便對數據進行簽名:BouncyCastle的,不同的行爲對桌面/ Android的簽名
static public byte[] sign(byte[] data, PrivateKey privateKey, int saltLength) throws Exception {
Signature instance = Signature.getInstance("SHA256withRSA/PSS", provider);
MGF1ParameterSpec mgf1ParameterSpec = new MGF1ParameterSpec("SHA-256");
PSSParameterSpec pssParameterSpec = new PSSParameterSpec("SHA-256", "MGF1",mgf1ParameterSpec , saltLength, 1);
instance.setParameter(pssParameterSpec);
instance.initSign(privateKey);
instance.update(data);
return instance.sign();
}
(代碼是用於檢查標誌非常相似)
桌面上,此代碼工作正常,可以用其他平臺檢查簽名(用python,node,...進行測試)。
在Android上,「saltLength」未被讀取,並且被強制爲32位,所以如果使用另一個「saltLength」,我無法在其他平臺上籤署/驗證簽名。 (我通過在桌面上強制saltLength值來驗證它)。
我真的不知道如何調試它,在桌面或Android上啓動的Java代碼具有不同的行爲。任何想法如何在Android上強制「saltLength」?
爲什麼不改變saltLength的類型長。 –
因爲'PSSParameterSpec'構造函數是'public PSSParameterSpec(String mdName,String mgfName,AlgorithmParameterSpec mgfSpec,int saltLen,int trailerField)' – Blusky