Подписание XML и дальнейшая проверка
(1 чел.) (1) гость
  • Страница:
  • 1
  • 2
  • 3

ТЕМА: Подписание XML и дальнейшая проверка

Подписание XML и дальнейшая проверка 3 года назад #2441

  • Andrey
  • Осваиваюсь на форуме
  • Постов: 20
  • Репутация: 0
Допустим есть форма, на ней пару полей: фамилия и имя. Мне необходимо подписать эти данные и проверять не изменилась ли запись. Как я это представляю:
Беру данные с формы и составляю, например, XML вида:
<?xml version='1.0' encoding='utf-8'?>
<root>
    <last_name>admin</last_name>
    <first_name>admin2</first_name>
</root>


После подписи получаю следующий документ:
<?xml version="1.0" encoding="utf-8" standalone="no"?>
<root>
    <last_name>admin</last_name>
    <first_name>admin2</first_name>
    <ds:Signature xmlns:ds="http://www.w3.org/2000/09/xmldsig#">
        <ds:SignedInfo>
            <ds:CanonicalizationMethod Algorithm="http://www.w3.org/TR/2001/REC-xml-c14n-20010315"/>
            <ds:SignatureMethod Algorithm="http://www.w3.org/2001/04/xmldsig-more#gost34310-gost34311"/>
            <ds:Reference URI="">
                <ds:Transforms>
                    <ds:Transform Algorithm="http://www.w3.org/2000/09/xmldsig#enveloped-signature"/>
                    <ds:Transform Algorithm="http://www.w3.org/TR/2001/REC-xml-c14n-20010315#WithComments"/>
                </ds:Transforms>
                <ds:DigestMethod Algorithm="http://www.w3.org/2001/04/xmldsig-more#gost34311"/>
                <ds:DigestValue>DthTjIeSmgdmUV7OzfKoI11kOl6TBfNL8w3NGDRsVzQ=</ds:DigestValue>
            </ds:Reference>
        </ds:SignedInfo>
        <ds:SignatureValue>
            kBfIJ1wRmP6I1HrrKjci1ZYOewpznujZWMtEQ0M0UsmbtJw3cotrCibbizUg29fYRGuKZ3Hxm/so
            PYfjaY/m7Q==
        </ds:SignatureValue>
        <ds:KeyInfo>
            <ds:X509Data>
                <ds:X509Certificate>
                    MIIEnTCCBEegAwIBAgIUYaPUdrsOgTr4tXZneSlJ3d6Gf8owDQYJKoMOAwoBAQECBQAwgc8xCzAJ
                    BgNVBAYTAktaMRUwEwYDVQQHDAzQkNCh0KLQkNCd0JAxFTATBgNVBAgMDNCQ0KHQotCQ0J3QkDFM
                    MEoGA1UECgxD0KDQnNCaIMKr0JzQldCc0JvQldCa0JXQotCi0IbQmiDQotCV0KXQndCY0JrQkNCb
                    0KvSmiDSmtCr0JfQnNCV0KLCuzFEMEIGA1UEAww70rDQm9Ci0KLQq9KaINCa0KPTmNCb0JDQndCU
                    0KvQoNCj0KjQqyDQntCg0KLQkNCb0KvSmiAoR09TVCkwHhcNMTUxMjIyMDgzOTA1WhcNMTYxMjIx
                    MDgzOTA1WjCB2zEeMBwGA1UEAwwV0KLQldCh0KLQntCSINCi0JXQodCiMRUwEwYDVQQEDAzQotCV
                    0KHQotCe0JIxGDAWBgNVBAUTD0lJTjEyMzQ1Njc4OTAxMTELMAkGA1UEBhMCS1oxFTATBgNVBAcM
                    DNCQ0KHQotCQ0J3QkDEVMBMGA1UECAwM0JDQodCi0JDQndCQMRgwFgYDVQQKDA/QkNCeICLQotCV
                    0KHQoiIxGDAWBgNVBAsMD0JJTjEyMzQ1Njc4OTAyMTEZMBcGA1UEKgwQ0KLQldCh0KLQntCS0JjQ
                    pzBsMCUGCSqDDgMKAQEBATAYBgoqgw4DCgEBAQEBBgoqgw4DCgEDAQEAA0MABEDqkHMfO3LOeVRE
                    Zj4/qzkq+IQ4GY1gkWb8WYb6f6q9JVIxII+2UR7wAk9pamqHdomzLMy+F36y0zan1ygoXlQ/o4IB
                    2zCCAdcwDgYDVR0PAQH/BAQDAgbAMCgGA1UdJQQhMB8GCCsGAQUFBwMEBggqgw4DAwQBAgYJKoMO
                    AwMEAQIBMA8GA1UdIwQIMAaABFW1tK4wHQYDVR0OBBYEFMAltOD4scJt4eOB13cfX41Ae6drMF4G
                    A1UdIARXMFUwUwYHKoMOAwMCAjBIMCEGCCsGAQUFBwIBFhVodHRwOi8vcGtpLmdvdi5rei9jcHMw
                    IwYIKwYBBQUHAgIwFwwVaHR0cDovL3BraS5nb3Yua3ovY3BzMFAGA1UdHwRJMEcwRaBDoEGGHmh0
                    dHA6Ly9jcmwucGtpLmdvdi5rei9nb3N0LmNybIYfaHR0cDovL2NybDEucGtpLmdvdi5rei9nb3N0
                    LmNybDBUBgNVHS4ETTBLMEmgR6BFhiBodHRwOi8vY3JsLnBraS5nb3Yua3ovZF9nb3N0LmNybIYh
                    aHR0cDovL2NybDEucGtpLmdvdi5rei9kX2dvc3QuY3JsMGMGCCsGAQUFBwEBBFcwVTAvBggrBgEF
                    BQcwAoYjaHR0cDovL3BraS5nb3Yua3ovY2VydC9wa2lfZ29zdC5jZXIwIgYIKwYBBQUHMAGGFmh0
                    dHA6Ly9vY3NwLnBraS5nb3Yua3owDQYJKoMOAwoBAQECBQADQQB1QhmJ0beLzTf1H9Xl1h/QSRDg
                    BUxzoeqySxLqXDHMynfAEBcEBdsigLOmacpsW/MjLRwh6avmiP/yVUVA2Ofg
                </ds:X509Certificate>
            </ds:X509Data>
        </ds:KeyInfo>
    </ds:Signature>
</root>


сохраняю его в базу или файл.

В следующий раз, когда я открываю эту же форму, необходимо сделать проверку на изменения:
Я снова собираю тот же XML, но уже не подписываю(потому как и ключа, и пароля у меня нет, да и посмотреть может другой человек, не тот кто подписал). Как я понимаю, достаточно апплетом получить хеш моего нового xml, а потом сравнить его с DigestValue. Если они равны, текст не поменялся.

Подскажите пожалуйста, правильно все?

Re: Подписание XML и дальнейшая проверка 3 года назад #2442

  • Murat Seisenov
  • Модератор
  • Постов: 391
  • Репутация: 19
Здравствуйте!

Да, все верно.
Модератор

Re: Подписание XML и дальнейшая проверка 3 года назад #2443

  • Andrey
  • Осваиваюсь на форуме
  • Постов: 20
  • Репутация: 0
У меня при этом хеш не сходится. Открываю тестовый апплет и получаю хеш по GOST. Он равен:
93651a9779cb928fa149ca991954cf9b988fd3abe2e177a4941f6d9217eecf8b

Что я упустил? Все действия выполняю при помощи вашего тестового апплета и странички из SDK.
Изменено: 3 года назад от Andrey.

Re: Подписание XML и дальнейшая проверка 3 года назад #2444

  • Andrey
  • Осваиваюсь на форуме
  • Постов: 20
  • Репутация: 0
Господа, прокомментируйте пожалуйста)

Re: Подписание XML и дальнейшая проверка 3 года назад #2445

  • Murat Seisenov
  • Модератор
  • Постов: 391
  • Репутация: 19
Хэш будет совпадать только если у Вас абсолютно идентичный документ.
Возможно, где-то лишний пробел или перенос строки (особенно в конце файла).
Модератор
Изменено: 3 года назад от Murat Seisenov.

Re: Подписание XML и дальнейшая проверка 3 года назад #2446

  • Andrey
  • Осваиваюсь на форуме
  • Постов: 20
  • Репутация: 0
Тоже так думал, убрал все символы. Табуляцию, переводы строк, пробелы. Скопировал текст и сразу вставил его на форму для тестирования. Хеш разный получился. Где-то читал что значение надо еще в base64 переводить, но все равно не совпадает.
  • Страница:
  • 1
  • 2
  • 3
FaLang translation system by Faboba