Не проверяется цифровая подпись

215
28 февраля 2017, 16:05

Подписываю текстовое сообщение на закрытом RSA ключе, потом перевожу эту подпись в Base64, потом обратно и проверяю её на открытом ключе. Почему что проверка показывает что подпись не действительна. Неужели Base64 как-то "ломает" текст подписи? Что я делаю не так?

Пример кода:

try {
    Signature ecp2 = Signature.getInstance("SHA256withRSA");
    ecp2.initSign((PrivateKey) readKey(login+"private"));
    ecp2.update("123".getBytes());
    byte[] tmps = ecp2.sign();
    Log.d("TAG123", new String(tmps));
    String s_b = Base64.encodeToString(tmps, Base64.DEFAULT);
    //signature_open_key = ecp.sign().toString();
    //String str = new String(tmps);

    Signature ecp3 = Signature.getInstance("SHA256withRSA");
    ecp3.initVerify((PublicKey ) readKey(login+"public" ));
    String gg = new String(Base64.decode(s_b.getBytes(), Base64.DEFAULT));
    Log.d("TAG123", "clear base64"+gg);
    ecp3.update("123".getBytes());
    byte[] tt = gg.getBytes();
    Log.d("TAG123", "clear base64"+tt);
    if(ecp3.verify(tt))
    {
        Log.d("TAG123", "signature test TRUE");
    }
    else
    {
        Log.d("TAG123", "signature test FALSE");
    }
} catch (Exception e) {
    e.printStackTrace();
}

Переводу в Base64 для того чтобы избавить от символов ' иначе в MySQL нельзя записать так как это спец символ.

Answer 1

Уважаемый DNS оказался прав. В итоге правильный вариант для потомков

try {
                                                    Signature ecp2 = Signature.getInstance("SHA256withRSA");
                                                    ecp2.initSign((PrivateKey) readKey(login+"private"));
                                                    ecp2.update("123".getBytes());
                                                    byte[] tmps = ecp2.sign();
                                                    Log.d("TAG123", new String(tmps));
                                                    byte[] s_b = Base64.encode(tmps, Base64.DEFAULT);
                                                    String buff = new String(s_b,"UTF-8");

                                                    Signature ecp3 = Signature.getInstance("SHA256withRSA");
                                                    ecp3.initVerify((PublicKey ) readKey(login+"public"));
                                                    byte[] gg = Base64.decode(buff.getBytes("UTF-8"), Base64.DEFAULT);
                                                    ecp3.update("123".getBytes());
                                                    if(ecp3.verify(gg))
                                                    {
                                                        Log.d("TAG123", "signature test TRUE");
                                                    }
                                                    else
                                                    {
                                                        Log.d("TAG123", "signature test FALSE");
                                                    }
                                                } catch (Exception e) {
                                                    e.printStackTrace();
                                                }
READ ALSO
Проблема в собранном JavaFX артефакте

Проблема в собранном JavaFX артефакте

Доброго времени суток Столкнулся с проблемой когда собрал JavaFX артефактВ появившемся окне в поле TextArea не выводится текст вопросов при том...

271