Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Java [игнор отключен] [закрыт для гостей] / проверка ЭЦП в xml средствами java / 16 сообщений из 16, страница 1 из 1
30.10.2014, 14:51
    #38791770
created4dev
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
проверка ЭЦП в xml средствами java
Беру из 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
30.10.2014, 16:56
    #38791962
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
проверка ЭЦП в xml средствами java
created4dev,

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

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

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

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

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
31.10.2014, 06:18
    #38792471
created4dev
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
проверка ЭЦП в xml средствами java
Usmancreated4dev,

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

Попробуйте.

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

Попробуйте проверить подпись так:
Код: java
1.
2.
SignatureRoutine sr = SignatureRoutine.getInstance(); // нужен jar'ник с апплетом
System.out.println(sr.verifySignature(data, sign, cert));
...
Рейтинг: 0 / 0
31.10.2014, 07:25
    #38792496
created4dev
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
проверка ЭЦП в xml средствами java
Заметил еще вот что:
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
31.10.2014, 07:27
    #38792497
Usman
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
проверка ЭЦП в xml средствами java
created4devМожет что-то теряется или кодировка не та?Скорее всего
...
Рейтинг: 0 / 0
31.10.2014, 07:29
    #38792498
created4dev
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
проверка ЭЦП в xml средствами java
Usmancreated4devМожет что-то теряется или кодировка не та?Скорее всего
А как правильно конвертировать не потеряв кодировку? У меня входящие переменные в функции типа String(из xml) мне нужно их загнать в byte ничего не потеряв.
...
Рейтинг: 0 / 0
31.10.2014, 07:39
    #38792500
Usman
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
проверка ЭЦП в xml средствами java
created4devUsmanпропущено...
Скорее всего
А как правильно конвертировать не потеряв кодировку? У меня входящие переменные в функции типа String(из xml) мне нужно их загнать в byte ничего не потеряв.Я на счет кодировки, может проблема в ней? вместо UTF-8, попробуйте cp1251
...
Рейтинг: 0 / 0
31.10.2014, 12:07
    #38792764
created4dev
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
проверка ЭЦП в xml средствами java
уже все перепробовал с кодировкой, не работает :(

и так:
Код: 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
31.10.2014, 13:27
    #38792888
Usman
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
проверка ЭЦП в xml средствами java
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
31.10.2014, 14:27
    #38792985
created4dev
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
проверка ЭЦП в xml средствами java
Не работает :( Возвращает false..
У меня задача проверить ЭЦП в xml на стороне сервера. Может у кого-нибудь есть простенький пример для проверки ЭЦП(ГОСТ) ?
...
Рейтинг: 0 / 0
Форумы / Java [игнор отключен] [закрыт для гостей] / проверка ЭЦП в xml средствами java / 16 сообщений из 16, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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