私は Android アプリを開発しており、データ認証にJavaSignature
クラスを使用する必要があります。
各 Android デバイスで、データに署名し、その署名を検証できます。ただし、署名するデータの明確なチャンク、明確なモジュラス、明確なプライベート指数、および明確なパブリック指数が与えられた場合、署名の出力はデバイスによって異なります。私はたくさんのデバイスで試してみましたが、Android 3.2 と 3.2.1 で同じ署名を取得しましたが、Android 2.2.x デバイスでは違いました。
KeyFactory
Java プロジェクトで RSAを使用して以前に生成した定数フィールドからこれらの署名を計算します。キーサイズは 2048bit です。
以下は、署名と検証を呼び出すために使用するコードの引用です。
public byte[] signData(byte[] data, PrivateKey privateKey) throws ... {
Signature signature = Signature.getInstance("SHA256withRSA");
signature.initSign(privateKey);
signature.update(data);
return signature.sign();
}
public boolean verifyData(byte[] data, byte[] sigBytes, PublicKey publicKey) throws ... {
Signature signature = Signature.getInstance("SHA256withRSA");
signature.initVerify(publicKey);
signature.update(data);
return signature.verify(sigBytes);
}
間違いでなければ、RSA で SHA256 を使用した署名は確定的です。では、そのような行動をどのように説明できますか?もう 1 つの興味深い質問は、デバイスをまたがって機能させるにはどうすればよいかということです。
前もってありがとう、フランク!