powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / Проверка ЭЦП в java
7 сообщений из 7, страница 1 из 1
Проверка ЭЦП в java
    #38823586
created4dev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Не получается проверить ЭЦП в java:

Код: java
1.
2.
3.
4.
5.
6.
7.
Security.addProvider(new IolaProvider());
Certificate certificate = CertificateFactory.getInstance("X509").generateCertificate(new ByteArrayInputStream(Base64.decode(cert.getBytes("UTF-8"))));
PublicKey publicKey=certificate.getPublicKey();
Signature signature = Signature.getInstance(publicKey.getAlgorithm(), IolaProvider.PROVIDER_NAME);
signature.initVerify(publicKey);
signature.update(Base64.decode(data.getBytes("UTF-8")));
System.out.println(signature.verify(Base64.decode(sign.getBytes("UTF-8"))));



Пример 2 - выдает false(хотя это правильная подпись, если беру с любой нормальной подписанной xml),
Пример 1 - выдает true(если подписываю сам, то проверка срабатывает, но другие сервисы не принимают эту подпись)
Что делаю не правильно? Может с кодировкой что-то не то?

Пример 1
Код: java
1.
2.
3.
4.
5.
String data="0L/RgNC+0LLQtdGA0LrQsA==";

String sign="A5Xa4YRTT63aTAAYjbSpQf4dpS9tbRaPcFYX5lm1SyBFz2TtpIA0oO4a9rITzg4ZlohiyJ18jci7dqzUxg69/w==";

String cert="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";



Пример 2
Код: java
1.
2.
3.
4.
5.
String data="8nbPMk3F5v++1YnYKGs/Mh2mU7yn3Ymq2PkYv5DVnAQ=";

String sign="AQL0C3JNQJGQKqkgciGvnpU5zQcgz34LdWkGqFvABMpq0aUi9BveyspglZEgj7IqVXWcc1+FMQIKp/XuLUgciA==";

String cert="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";

...
Рейтинг: 0 / 0
Проверка ЭЦП в java
    #38823616
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Как-то тут странно. Обычно на вход к decode прихдит строка с "хвостиком"
типа "0L/RgNC+0LLQtdGA0LrQsA==" ее декодят и получают байт-массив.
А у тебя идёт еще 1 фаза преобразования в байт-массив через getBytes.

Код: java
1.
signature.update(Base64.decode(data.getBytes("UTF-8")));



Собственно... если ты работаешь в базисе Base64 представления двоичных данных
то тебе не нужен Utf-8 конвертер и наоборот.
...
Рейтинг: 0 / 0
Проверка ЭЦП в java
    #38823624
created4dev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
maytonКак-то тут странно. Обычно на вход к decode прихдит строка с "хвостиком"
типа "0L/RgNC+0LLQtdGA0LrQsA==" ее декодят и получают байт-массив.
А у тебя идёт еще 1 фаза преобразования в байт-массив через getBytes.

Код: java
1.
signature.update(Base64.decode(data.getBytes("UTF-8")));



Собственно... если ты работаешь в базисе Base64 представления двоичных данных
то тебе не нужен Utf-8 конвертер и наоборот.

Убрал везде .getBytes("UTF-8") - результат такой же, по сторонним подписанным xml выдает false :(
...
Рейтинг: 0 / 0
Проверка ЭЦП в java
    #38881591
sergnn
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Удалось решить проблему?
А то у меня сейчас то же самое......
...
Рейтинг: 0 / 0
Проверка ЭЦП в java
    #38882180
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Афтор парится в основах. Он не знает что делает Base64.decode и что делает getBytes("UTF-8").
Как следствие он не может разбить сложную задачу на части и протестировать.

А криптография - работает как часы. Уж много десятилетий.

Quod erat demostrandum.
...
Рейтинг: 0 / 0
Проверка ЭЦП в java
    #38888078
sergnn
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
mayton,

афтар запарился совсем в другом.
Подпись оказалась формата cms.
То есть подписывается не сообщение, а набор из нескольких атрибутов.
В том числе хеш сообщения, хеш сертификата, времф подписи и т.д.
таким образом алгоритм проверки оказался несколько замороченным.
1. Проверка подписи на соответствие сертификату. (То есть из подписи берём атрибуты и проверям)
2. Проверка соответствия хеша сообщения из подписи и хеша актуального сообщения.
Если обе проверки проходят - то всё OK.
...
Рейтинг: 0 / 0
Проверка ЭЦП в java
    #38888085
sergnn
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
sergnnmayton,

афтар запарился совсем в другом.
Подпись оказалась формата cms.
То есть подписывается не сообщение, а набор из нескольких атрибутов.
В том числе хеш сообщения, хеш сертификата, времф подписи и т.д.
таким образом алгоритм проверки оказался несколько замороченным.
1. Проверка подписи на соответствие сертификату. (То есть из подписи берём атрибуты и проверям)
2. Проверка соответствия хеша сообщения из подписи и хеша актуального сообщения.
Если обе проверки проходят - то всё OK.

То есть это у меня так решилось.
У автора топика подозреваю, что проблема в том же.
...
Рейтинг: 0 / 0
7 сообщений из 7, страница 1 из 1
Форумы / Java [игнор отключен] [закрыт для гостей] / Проверка ЭЦП в java
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]