の署名のための異なる振る舞い私はデータに署名するために、次のコードを使用します。は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、ノードなどでテスト済み)で確認できます。
Androidの場合、「saltLength」は読み取られず、32ビットに強制されるため、別の「saltLength」が使用されている場合、他のプラットフォームのデバイスから署名/署名を確認することはできません。 (私はそれをデスクトップ上でbrute-forcecing saltLength値によって検証しました)。
私は実際にそれをデバッグする方法はわかりません。まったく同じJavaコードは、デスクトップまたはAndroidで起動されたときとは異なる動作をします。 Androidで「saltLength」を強制する方法はありますか?
。 –
'PSSParameterSpec'コンストラクタが' public PSSParameterSpec(String mdName、String mgfName、AlgorithmParameterSpec mgfSpec、int saltLen、int trailerField) 'であるため、 – Blusky