Подписание и проверка данных дают неправильный результат в Java

Я генерирую открытый и закрытый ключи, а затем использую этот закрытый ключ для подписи текстовых данных. По какой-то причине, когда я проверяю подпись, она дает False. Ниже приведен мой код, и я не могу понять, почему это происходит.

Я использую одни и те же пары открытых и закрытых ключей с алгоритмом RSA.

 String msg = "Some data need to be signed.";

    //Creating KeyPair generator object
    KeyPairGenerator keyPairGen = null;
    try {
        keyPairGen = KeyPairGenerator.getInstance("RSA");
    } catch (NoSuchAlgorithmException e) {
        e.printStackTrace();
    }

    //Initializing the key pair generator
    keyPairGen.initialize(2048);

    //Generate the pair of keys
    KeyPair pair = keyPairGen.generateKeyPair();
    //KeyPair pair2 = keyPairGen.generateKeyPair();

    //Getting the private key from the key pair
    PrivateKey privKey = pair.getPrivate();

    //Creating a Signature object
    Signature sign = null;
    try {
        sign = Signature.getInstance("SHA256withRSA");
    } catch (NoSuchAlgorithmException e) {
        e.printStackTrace();
    }

    //Initialize the signature
    try {
        sign.initSign(privKey);
    } catch (InvalidKeyException e) {
        e.printStackTrace();
    }
    byte[] bytes = msg.getBytes();

    //Adding data to the signature
    try {
        sign.update(bytes);
    } catch (SignatureException e) {
        e.printStackTrace();
    }

    //Calculating the signature
    try {
        byte[] signature = sign.sign();

        Signature mySig2 = Signature.getInstance("SHA256withRSA");

        mySig2.initVerify(pair.getPublic());

        boolean isSigValid = mySig2.verify(signature);

       //This part supposed to be True since I am using valid public key but it shows false. 
        log.info("Valid Signing = "+isSigValid); 

    } catch (SignatureException e) {
        e.printStackTrace();
    } catch (NoSuchAlgorithmException e) {
        e.printStackTrace();
    } catch (InvalidKeyException e) {
        e.printStackTrace();
    }
Основы программирования на Java
Основы программирования на Java
Java - это высокоуровневый объектно-ориентированный язык программирования, основанный на классах.
Концепции JavaScript, которые вы должны знать как JS программист!
Концепции JavaScript, которые вы должны знать как JS программист!
JavaScript (Js) - это язык программирования, объединяющий HTML и CSS с одной из основных технологий Всемирной паутины. Более 97% веб-сайтов используют...
0
0
33
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Вы забыли загрузить сообщение в mySig2

mySig2.update(bytes)

Таким образом, вы в основном проверяете, что это правильная подпись для пустого сообщения.

спасибо, я не понял, как я пропустил обновление подписи, хотя я потратил хорошее время на поиск причины ложного результата.

wolvorinePk 22.05.2019 20:09

Другие вопросы по теме