powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / проверка ЭЦП в xml средствами java
16 сообщений из 16, страница 1 из 1
проверка ЭЦП в xml средствами java
    #38791770
created4dev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Беру из xml в примере данные:
в cert - сертификат(строка из тега <ds:X509Certificate>)
в data- подписываемые данные(строка из тега <ds:DigestValue>)
в sign - подпись (строка из тега <ds:SignatureValue>)
Срок годности у сертификата нормальный

private static final String ENCODING = "UTF-8";
...
Security.addProvider(new IolaProvider());
Certificate certificate = CertificateFactory.getInstance("X509").generateCertificate(new ByteArrayInputStream(Base64.decode(cert.getBytes(ENCODING))));
PublicKey publicKey=certificate.getPublicKey();
Signature signature = Signature.getInstance(publicKey.getAlgorithm(), IolaProvider.PROVIDER_NAME);
signature.initVerify(publicKey);
signature.update(Base64.decode(data));
System.out.println(signature.verify(Base64.decode(sign)));

выдает false, что делаю не правильно?
...
Рейтинг: 0 / 0
проверка ЭЦП в xml средствами java
    #38791962
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
created4dev,

Помоему какая-то лажа в Base64. Из какого API? Почему массив в массив гоняется а, а не String->byte[] ?
А пробелы и всякие переносы, точно потриманы при получении из XML?
...
Рейтинг: 0 / 0
проверка ЭЦП в xml средствами java
    #38791966
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
created4dev,

А готовый для XML API нельзя применить?
http://www.oracle.com/technetwork/java/javamail/dig-signature-api-140772.html
...
Рейтинг: 0 / 0
проверка ЭЦП в xml средствами java
    #38792021
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Че такое IolaProvider?
...
Рейтинг: 0 / 0
проверка ЭЦП в xml средствами java
    #38792436
Фотография Usman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
created4dev,

Может "X точка 509" ?
Код: java
1.
Certificate certificate = CertificateFactory.getInstance("X.509")...

Попробуйте.
...
Рейтинг: 0 / 0
проверка ЭЦП в xml средствами java
    #38792437
Фотография Usman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maytonЧе такое IolaProvider?Криптопровайдер IOLA
...
Рейтинг: 0 / 0
проверка ЭЦП в xml средствами java
    #38792466
created4dev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Спасибо за ответы, но проблему пока не удалось решить :(

String->byte[] - не помогло, тоже выдает false. Хотя почти уверен что делаю что-то не так с base64, т.к. если сам подписываю и тут же проверяю, то выдает true. Если беру с любой подписанной годной xml, то выдает false.
Для примера вот этот выдает false:

Код: xml
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
..
<ds:DigestValue>IaBO06Bzu9oVD51iOAzElFsuH6dzJDWQTHHpvVYlHAE=</ds:DigestValue>
..
<ds:SignatureValue>
XJJra3koAsYXjk18xXeCksucqfegFSLB8dTKEZeFstkFWr/IMobQUgUPIscm0KJgzfvVHsjrtRdh
QHcnpmfC3g==
</ds:SignatureValue>
..
<ds:X509Certificate>
MIIFzDCCBXWgAwIBAgIgdwt7wTCQnyII5xnzKn7zXpWSW1qB4Hie8uh51jGU0HEwDgYKKwYBBAG1
EQECAgUAMIIBFDEfMB0GA1UEAwwW0J3Qo9CmINCg0JogKNCT0J7QodCiKTFDMEEGA1UECww60JjQ
vdGE0YDQsNGB0YLRgNGD0LrRgtGD0YDQsCDQvtGC0LrRgNGL0YLRi9GFINC60LvRjtGH0LXQuTFx
MG8GA1UECgxo0J3QsNGG0LjQvtC90LDQu9GM0L3Ri9C5INGD0LTQvtGB0YLQvtCy0LXRgNGP0Y7R
idC40Lkg0YbQtdC90YLRgCDQoNC10YHQv9GD0LHQu9C40LrQuCDQmtCw0LfQsNGF0YHRgtCw0L0x
FTATBgNVBAcMDNCQ0YHRgtCw0L3QsDEVMBMGA1UECAwM0JDRgdGC0LDQvdCwMQswCQYDVQQGEwJL
WjAeFw0xMzA4MjEwOTAwMzlaFw0xNDA4MjEwOTAwMzlaMIIBjjEYMBYGA1UEBRMPSUlONTg5NzQ2
MjMxNTg3MRYwFAYKCZImiZPyLGQBGRYGUk9MRTAwMRAwDgYDVQQLDAdLUzEyMzQ1MRgwFgYDVQQL
DA9CSU4zNDg5NTEyNzY1ODQxITAfBgNVBAoMGNCa0JDQl9Cd0JDQp9CV0JnQodCi0JLQkDFRME8G
A1UEAwxI0JrQkNCX0J3QkNCn0JXQmdCh0KLQktCQINCU0JXQmdCh0KLQktCj0K7QqdCY0Jkg0JrQ
kNCX0J3QkNCn0JXQmdCh0KLQktCQMTgwNgYDVQQEDC/QmtCQ0JfQndCQ0KfQldCZ0KHQotCS0JAg
0JTQldCZ0KHQotCS0KPQrtCp0JjQmTEhMB8GA1UEKgwY0JrQkNCX0J3QkNCn0JXQmdCh0KLQktCQ
MSAwHgYJKoZIhvcNAQkBFhFBQkROQlNOQE5XRE5ETi5LVDELMAkGA1UEBhMCS1oxFTATBgNVBAgM
DNCQ0KHQotCQ0J3QkDEVMBMGA1UEBwwM0JDQodCi0JDQndCQMGMwDgYKKwYBBAG1EQEFCAUAA1EA
BgIAADqqAAAARUMxAAIAANgVScMvVRrN+53UlgPOlY6koESuUSKUqK0d0NQfdNwSFch8hNA/2FkZ
OQmgjiw1MITKr4ib2Bj1rL795DPzp9yjggILMIICBzAdBgNVHQ4EFgQU4Ijndc5tl769ASk8IejV
BdTKdUIwQgYIKwYBBQUHAQEENjA0MDIGCCsGAQUFBzAChiZodHRwOi8vcGtpLmdvdi5rei9pbmZv
L2NhY2VydF9nb3N0LmNlcjAMBgNVHSMEBTADgAEwMAsGA1UdDwQEAwIAwDAzBgkqgw4FEwECAgEE
JgQkDCJUcmVhc3VyZS1DbGllbnQgSW5mb3JtYXRpb24gU3lzdGVtMGQGA1UdLgRdMFswK6ApoCeG
JWh0dHA6Ly9jcmwucGtpLmt6L2NybC9Hb3N0MF9kZWx0YS5jcmwwLKAqoCiGJmh0dHA6Ly9jcmwx
LnBraS5rei9jcmwvR29zdDBfZGVsdGEuY3JsMIGRBgNVHSAEgYkwgYYwPQYKKoMOBRMBAgIBATAv
MC0GCCsGAQUFBwIBFiFodHRwOi8vcGtpLmdvdi5rei9pbmZvL2syX3JlZy5wZGYwRQYKKoMOBRMB
AgIBAjA3MDUGCCsGAQUFBwIBFilodHRwOi8vcGtpLmdvdi5rei9pbmZvL2syX3NpZ25fcG9saWN5
LnBkZjBYBgNVHR8EUTBPMCWgI6Ahhh9odHRwOi8vY3JsLnBraS5rei9jcmwvR29zdDAuY3JsMCag
JKAihiBodHRwOi8vY3JsMS5wa2kua3ovY3JsL0dvc3QwLmNybDAOBgorBgEEAbURAQICBQADQQBk
9KqSGpZ1psTHNov1OA6QCGfHvcNBZs3SMTrODSL2HsUdiPbWKKo3SfpdrR1t9qGIibN+VYeNEOHM
98NAulA/
</ds:X509Certificate>
...
Рейтинг: 0 / 0
проверка ЭЦП в xml средствами java
    #38792471
created4dev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Usmancreated4dev,

Может "X точка 509" ?
Код: java
1.
Certificate certificate = CertificateFactory.getInstance("X.509")...

Попробуйте.

- тоже выдает false
...
Рейтинг: 0 / 0
проверка ЭЦП в xml средствами java
    #38792493
Фотография Usman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
created4dev,

Попробуйте проверить подпись так:
Код: java
1.
2.
SignatureRoutine sr = SignatureRoutine.getInstance(); // нужен jar'ник с апплетом
System.out.println(sr.verifySignature(data, sign, cert));
...
Рейтинг: 0 / 0
проверка ЭЦП в xml средствами java
    #38792496
created4dev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Заметил еще вот что:
System.out.println("1:"+new String(res));
String sign= new String(res);
byte[] res2= sign.getBytes(ENCODING);
System.out.println("2:"+new String(res2));

На экран выводится одинаковое значение, но подпись(в том варианте где я сам подписывал\проверял и выдавало true) начинает тоже выдавать false если использовать res2.

Может я не правильно конвертирую из String в byte и обратно? Может что-то теряется или кодировка не та?
...
Рейтинг: 0 / 0
проверка ЭЦП в xml средствами java
    #38792497
Фотография Usman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
created4devМожет что-то теряется или кодировка не та?Скорее всего
...
Рейтинг: 0 / 0
проверка ЭЦП в xml средствами java
    #38792498
created4dev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Usmancreated4devМожет что-то теряется или кодировка не та?Скорее всего
А как правильно конвертировать не потеряв кодировку? У меня входящие переменные в функции типа String(из xml) мне нужно их загнать в byte ничего не потеряв.
...
Рейтинг: 0 / 0
проверка ЭЦП в xml средствами java
    #38792500
Фотография Usman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
created4devUsmanпропущено...
Скорее всего
А как правильно конвертировать не потеряв кодировку? У меня входящие переменные в функции типа String(из xml) мне нужно их загнать в byte ничего не потеряв.Я на счет кодировки, может проблема в ней? вместо UTF-8, попробуйте cp1251
...
Рейтинг: 0 / 0
проверка ЭЦП в xml средствами java
    #38792764
created4dev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
уже все перепробовал с кодировкой, не работает :(

и так:
Код: java
1.
2.
signature.update(data.getBytes("cp1251"));
if(signature.verify(Base64.decode(sign.getBytes("cp1251")))){



и так:
Код: java
1.
2.
signature.update(Base64.decode(data.getBytes("cp1251")));
if(signature.verify(Base64.decode(sign.getBytes("cp1251")))){



и эдак:
Код: java
1.
2.
signature.update(Base64.decode(data.getBytes("UTF-8")));
if(signature.verify(Base64.decode(sign.getBytes("UTF-8")))){



и много других вариантов типа:
Код: java
1.
2.
signature.update(data.getBytes("UTF-8"));
if(signature.verify(Base64.decode(sign.getBytes("UTF-8")))){



Всегда выдает false если конвертирую из String, если сам подписываю без конвертаций и тут же проверяю, то true

В DigestValue точно base64?
...
Рейтинг: 0 / 0
проверка ЭЦП в xml средствами java
    #38792888
Фотография Usman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
created4dev,

Похоже, что есть несоответствие данных: либо данные не те, либо подпись левая.
Преобразование из Base64 в строку:
Код: java
1.
2.
3.
System.out.println(new String(Base64.decode(data)));
System.out.println(new String(Base64.decode(data), "cp1251"));
System.out.println(new String(Base64.decode(data), "UTF-8"));
...
Рейтинг: 0 / 0
проверка ЭЦП в xml средствами java
    #38792985
created4dev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Не работает :( Возвращает false..
У меня задача проверить ЭЦП в xml на стороне сервера. Может у кого-нибудь есть простенький пример для проверки ЭЦП(ГОСТ) ?
...
Рейтинг: 0 / 0
16 сообщений из 16, страница 1 из 1
Форумы / Java [игнор отключен] [закрыт для гостей] / проверка ЭЦП в xml средствами java
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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