Допустим есть форма, на ней пару полей: фамилия и имя. Мне необходимо подписать эти данные и проверять не изменилась ли запись. Как я это представляю:
Беру данные с формы и составляю, например, 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. Если они равны, текст не поменялся.
Подскажите пожалуйста, правильно все?