SHA256 с подписью RSA возвращает разные выходные данные на разных устройствах Android.

Я разрабатываю приложение для 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 является детерминированной. Тогда как я могу объяснить такое поведение? Еще один интересный вопрос, как я могу сделать так, чтобы это работало на разных устройствах, то есть подписи были бы одинаковыми, независимо от того, какое устройство я использую?

Заранее спасибо, Франк!

8
задан franckysnow 28 June 2012 в 19:05
поделиться