Я разрабатываю приложение для Android, и мне нужно использовать java класс Signature
для аутентификации данных.
На каждом Android-устройстве я могу подписывать данные и проверять их подпись. Однако, учитывая определенный фрагмент данных для подписи, определенный модуль, определенный частный показатель и определенный общедоступный показатель, выходные данные моих подписей различаются в зависимости от устройств. Я попробовал несколько устройств и получил одинаковые подписи для Android 3.2 и 3.2.1, но разные для устройства Android 2.2.x.
Я вычисляю эту подпись из постоянных полей, которые я создал ранее, используя KeyFactory
с RSA в проекте Java. Размер ключа 2048 бит.
Вот цитата из кода, который я использую для вызова Signature и Verification.
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);
}
Если я не ошибаюсь, подпись с использованием SHA256 с RSA является детерминированной. Тогда как я могу объяснить такое поведение? Еще один интересный вопрос, как я могу сделать так, чтобы это работало на разных устройствах, то есть подписи были бы одинаковыми, независимо от того, какое устройство я использую?
Заранее спасибо, Франк!