Ключевое слово в защите информации
КЛЮЧЕВОЕ СЛОВО
в защите информации
Получить ГОСТ TLS-сертификат для домена (SSL-сертификат)
Добро пожаловать, Гость! Чтобы использовать все возможности Вход или Регистрация.

Уведомление

Icon
Error

Опции
К последнему сообщению К первому непрочитанному
Offline heavyside  
#1 Оставлено : 23 октября 2017 г. 12:49:02(UTC)
heavyside

Статус: Участник

Группы: Участники
Зарегистрирован: 26.11.2015(UTC)
Сообщений: 14
Российская Федерация
Откуда: Москва

Сказал(а) «Спасибо»: 11 раз
Здравствуйте!

Пытаюсь по частям воспроизвести подписывание XML по шаблону.
Для этого взял за основу пример подписи XML по шаблону
только чуток отредактировал метод канонизации, вместо http://www.w3.org/2001/10/xml-exc-c14n# указал http://www.w3.org/TR/2001/REC-xml-c14n-20010315(но кстати на хэш в данном случае это не повлияло)
Код:
<?xml version="1.0" encoding="UTF-8"?>
<!-- 
 Original XML doc file for sign example. 
-->
<Envelope xmlns="urn:envelope">
  <Data>
   Hello, World!
  </Data>
  <Node xml:id="nodeID">
   Hello, Node!
  </Node>
  <Signature xmlns="http://www.w3.org/2000/09/xmldsig#">
  <SignedInfo>
      <CanonicalizationMethod Algorithm="http://www.w3.org/TR/2001/REC-xml-c14n-20010315"/>
      <SignatureMethod Algorithm="http://www.w3.org/2001/04/xmldsig-more#gostr34102001-gostr3411"/>
      <Reference URI="#nodeID">
      <Transforms>
          <Transform Algorithm="http://www.w3.org/2000/09/xmldsig#enveloped-signature"/>
      </Transforms>
      <DigestMethod Algorithm="http://www.w3.org/2001/04/xmldsig-more#gostr3411"/>
      <DigestValue/>
      </Reference>
  </SignedInfo>
  <SignatureValue/>
  <KeyInfo/>
  </Signature>
</Envelope>


Далее его подписал, получил хэш:
Код:
<DigestValue>HqSr6WBLm1fD1bm0XzTxm1Fio4xODWpI2kliY9Jqf80=</DigestValue>

Или если в hex вернуть:
Код:
1EA4ABE9604B9B57C3D5B9B45F34F19B5162A38C4E0D6A48DA496263D26A7FCD

Подписывал его таким кодом(вырезал выше объявленный xml):
Код:
function SignCadesXML_Async(certId, sXmlData) {
    return cadesplugin.async_spawn(function*(arg) {
        if (!arg[0]) {
            alert("Сертификат не выбран!");
            return;
        }
        var Result = {};
        var sXmlData = arg[1];
        sXmlData=".....";
        console.log(sXmlData);
        var thumbprint = arg[0].split(" ").reverse().join("").replace(/\s/g, "").toUpperCase();
        try {
            var oStore = yield cadesplugin.CreateObjectAsync("CAdESCOM.Store");
            yield oStore.Open();
        } catch (err) {
            alert('Не удалось создать CAdESCOM.Store: ' + err.number);
            return;
        }

        var CAPICOM_CERTIFICATE_FIND_SHA1_HASH = 0;
        var all_certs = yield oStore.Certificates;
        var oCerts = yield all_certs.Find(CAPICOM_CERTIFICATE_FIND_SHA1_HASH, thumbprint);

        if ((yield oCerts.Count) == 0) {
            alert("Сертификат не найден");
            return;
        }
        var certificate = yield oCerts.Item(1);
        try
        {
            var errormes = "";
            try {
                var oSigner = yield cadesplugin.CreateObjectAsync("CAdESCOM.CPSigner");
            } catch (err) {
                errormes = "Не удалось создать CAdESCOM.CPSigner: " + err.number;
                throw errormes;
            }
            if (oSigner) {
                yield oSigner.propset_Certificate(certificate);
            }
            else {
                errormes = "Не удалось создать CAdESCOM.CPSigner";
                throw errormes;
            }

            var oSignedXML = yield cadesplugin.CreateObjectAsync("CAdESCOM.SignedXML");
          
            if (sXmlData) {
                // Данные на подпись ввели
                yield oSignedXML.propset_Content(sXmlData);
                yield oSignedXML.propset_SignatureType(cadesplugin.CADESCOM_XML_SIGNATURE_TYPE_TEMPLATE);

                try {
                    Result.Signature = yield oSignedXML.Sign(oSigner);
                    console.log(Result.Signature);
                }
                catch (err) {
                    errormes = "Не удалось создать подпись из-за ошибки: " + GetErrorMessage(err);
                    throw errormes;
                }
            }
            return Result;
        }
        catch(err)
        {
            alert("Возникла ошибка:"+err);
        }
    }, certId, sXmlData); //cadesplugin.async_spawn
}


теперь я пытаюсь получить этот же хэш вручную. Для этого я на java вызываю для канонизации узла:

Код:
NamespaceContextImpl namespaces = new NamespaceContextImpl();
            namespaces.addPrefix("main", "urn:envelope");
            xpath.setNamespaceContext(namespaces);
            XPathExpression expr = xpath.compile("//main:Node");
            NodeList nodes = (NodeList)expr.evaluate(doc, XPathConstants.NODESET);
            
            Canonicalizer canon = Canonicalizer.getInstance(Canonicalizer.ALGO_ID_C14N_OMIT_COMMENTS);
            byte[] canonXmlBytes = canon.canonicalizeSubtree(nodes.item(0));
            canonXmlString = new String(canonXmlBytes);


Получаю:
Код:
<Node xmlns="urn:envelope" xml:id="nodeID">
   Hello, Node!
  </Node>


Считаю от него хэш так:
Код:
function calcHash(data) {
  return cadesplugin.async_spawn(function*(arg) {
              var oHashedData = yield cadesplugin.CreateObjectAsync("CAdESCOM.HashedData");
              oHashedData.Algorithm = cadesplugin.CADESCOM_HASH_ALGORITHM_CP_GOST_3411;
              yield oHashedData.Hash(arg[0]);
              return yield oHashedData.Value;
  },data);
}

calcHash("<Node xmlns=\"urn:envelope\" xml:id=\"nodeID\">\n" +
            "   Hello, Node!\n" +
            "  </Node>");

я получаю
Код:
03A0D1C676EDC9AA4CFADA794C32B79D67A0A4023EB6E98A0DA1902EEBDB96D3


1. ОС Windows 7x64. Браузер - Опера 48.
2. Версия плагина - 2.0.13064, КриптоПро CSP - 3.6.7777
3. Подпись CAdES_BES я так понимаю.
4. Логи прикрепил, но может туда не всё вошло, тогда прошу пояснить что ещё и как включить. В реестр в 4 местах параметры прописал. signlog.LOG (2kb) загружен 5 раз(а).


В чём может быть проблема?
Мне очень не нравится результат канонизации xml, но я пробовал различные варианты - ничего не сходится. К сожалению, оставить подпись по шаблону я не могу, т.к. общая задача сложнее и включает кастомную нормализацию xml. Brick wall
Offline cross  
#2 Оставлено : 23 октября 2017 г. 13:56:18(UTC)
Анатолий Беляев

Статус: Сотрудник

Группы: Администраторы, Участники
Зарегистрирован: 24.11.2009(UTC)
Сообщений: 965
Откуда: Crypto-Pro

Сказал(а) «Спасибо»: 3 раз
Поблагодарили: 174 раз в 152 постах
При таком подсчете хеша
Цитата:
var oHashedData = yield cadesplugin.CreateObjectAsync("CAdESCOM.HashedData");
oHashedData.Algorithm = cadesplugin.CADESCOM_HASH_ALGORITHM_CP_GOST_3411;
yield oHashedData.Hash(arg[0]);
return yield oHashedData.Value;

У вас xml воспринимается как UCS2LE строка. Это скорее всего не то что вы хотите. Что бы правильно передать данные вам надо выставить ContentEncoding и передать строку как base64 кодированную.
http://cpdn.cryptopro.ru...es/content-encoding.html
Техническую поддержку оказываем тут.
Наша база знаний.
Наша страничка в Instagram.
thanks 1 пользователь поблагодарил Анатолий Беляев за этот пост.
heavyside оставлено 23.10.2017(UTC)
Offline heavyside  
#3 Оставлено : 23 октября 2017 г. 15:15:31(UTC)
heavyside

Статус: Участник

Группы: Участники
Зарегистрирован: 26.11.2015(UTC)
Сообщений: 14
Российская Федерация
Откуда: Москва

Сказал(а) «Спасибо»: 11 раз
Автор: cross Перейти к цитате
При таком подсчете хеша
Цитата:
var oHashedData = yield cadesplugin.CreateObjectAsync("CAdESCOM.HashedData");
oHashedData.Algorithm = cadesplugin.CADESCOM_HASH_ALGORITHM_CP_GOST_3411;
yield oHashedData.Hash(arg[0]);
return yield oHashedData.Value;

У вас xml воспринимается как UCS2LE строка. Это скорее всего не то что вы хотите. Что бы правильно передать данные вам надо выставить ContentEncoding и передать строку как base64 кодированную.
http://cpdn.cryptopro.ru...es/content-encoding.html


Спасибо! Хэш сошёлся. Видел эту документацию, хотел попробовать, но там указано ContentEncoding, а в текущей версии плагина оно DataEncoding. Поэтому я решил, что меня это не касается.
Наверно надо поменять в документации.
Offline heavyside  
#4 Оставлено : 24 октября 2017 г. 13:17:34(UTC)
heavyside

Статус: Участник

Группы: Участники
Зарегистрирован: 26.11.2015(UTC)
Сообщений: 14
Российская Федерация
Откуда: Москва

Сказал(а) «Спасибо»: 11 раз
И всё-таки требуется помощь дальше(

Теперь канонизирую SignedInfo с подставленным правильным хэшем, получаю:
Код:
<SignedInfo xmlns="http://www.w3.org/2000/09/xmldsig#">
      <CanonicalizationMethod Algorithm="http://www.w3.org/TR/2001/REC-xml-c14n-20010315"></CanonicalizationMethod>
      <SignatureMethod Algorithm="http://www.w3.org/2001/04/xmldsig-more#gostr34102001-gostr3411"></SignatureMethod>
      <Reference URI="#nodeID">
      <Transforms>
          <Transform Algorithm="http://www.w3.org/2000/09/xmldsig#enveloped-signature"></Transform>
      </Transforms>
      <DigestMethod Algorithm="http://www.w3.org/2001/04/xmldsig-more#gostr3411"></DigestMethod>
      <DigestValue>HqSr6WBLm1fD1bm0XzTxm1Fio4xODWpI2kliY9Jqf80=</DigestValue>
      </Reference>
  </SignedInfo>


Загоняю его в base64, cчитаю от него хэш, получаю:
Код:
79415FBE02245F9767FABD779FF6FCB77989A03DB5112B4663ACFD1DA5205238

Далее методом

Код:
function CreateSignature(oCertificate, oHashedData) {
  return cadesplugin.async_spawn(function*(arg) {
        // Создаем объект CAdESCOM.RawSignature
        var oRawSignature = yield cadesplugin.CreateObjectAsync("CAdESCOM.RawSignature");
        // Вычисляем значение подписи
        try {
            var sRawSignature = yield oRawSignature.SignHash(arg[1], arg[0]);
        } catch (err) {
            alert("Failed to create signature. Error: " + cadesplugin.getLastError(err));
            return;
        }
        return sRawSignature;
  },oCertificate, oHashedData);


Получаю значение подписи. Ну, например, такую:
Код:
6F025FF0BA49E814FCA6B86CB0BC5BB6D163A09A1F8E20559BA649577F78FAEFBEE59E24DAFDC66EAE866FCF5ACB33E7CBEC2F4D5D27BCDC64D000AEC6E08E88

Далее её переводим в строку, переворачиваем и кодируем в Base64. Получаю
Код:
COgIbuwKAE3GzXvS1fTCvnw+s6z1/Gbo6mbcr03iWe77ro/3d5VkulkF4vihCToWbbvFC8uGa8pPgZ6kC/8l8A==

Вставляю в xml:
Код:
<?xml version="1.0" encoding="UTF-8"?>
<!-- 
 Original XML doc file for sign example. 
-->
<Envelope xmlns="urn:envelope">
  <Data>
   Hello, World!
  </Data>
  <Node xml:id="nodeID">
   Hello, Node!
  </Node>
  <Signature xmlns="http://www.w3.org/2000/09/xmldsig#">
  <SignedInfo>
      <CanonicalizationMethod Algorithm="http://www.w3.org/TR/2001/REC-xml-c14n-20010315"/>
      <SignatureMethod Algorithm="http://www.w3.org/2001/04/xmldsig-more#gostr34102001-gostr3411"/>
      <Reference URI="#nodeID">
      <Transforms>
          <Transform Algorithm="http://www.w3.org/2000/09/xmldsig#enveloped-signature"/>
      </Transforms>
      <DigestMethod Algorithm="http://www.w3.org/2001/04/xmldsig-more#gostr3411"/>
      <DigestValue>HqSr6WBLm1fD1bm0XzTxm1Fio4xODWpI2kliY9Jqf80=</DigestValue>
      </Reference>
  </SignedInfo>
  <SignatureValue>COgIbuwKAE3GzXvS1fTCvnw+s6z1/Gbo6mbcr03iWe77ro/3d5VkulkF4vihCToWbbvFC8uGa8pPgZ6kC/8l8A==</SignatureValue>
  <KeyInfo>
<X509Data>
<X509Certificate>MIIKAjCCCbGgAwIBAgIRAuGy2XrEDNGA5xE7srknKIIwCAYGKoUDAgIDMIIBozEg
MB4GCSqGSIb3DQEJARYRdnVjQGNhLmN1c3RvbXMucnUxGjAYBggqhQMDgQMBARIM
MDA3NzMwNjU0NDcxMRgwFgYFKoUDZAESDTExMTc3NDY4ODk5NDExezB5BgNVBAoM
ctCm0LXQvdGC0YDQsNC70YzQvdC+0LUg0LjQvdGE0L7RgNC80LDRhtC40L7QvdC9
0L4t0YLQtdGF0L3QuNGH0LXRgdC60L7QtSDRgtCw0LzQvtC20LXQvdC90L7QtSDR
g9C/0YDQsNCy0LvQtdC90LjQtTE6MDgGA1UECQwx0L/Quy7QmtC+0LzRgdC+0LzQ
vtC70YzRgdC60LDRjyDQtC4xINC60L7RgNC/LiDQkDEVMBMGA1UEBwwM0JzQvtGB
0LrQstCwMRswGQYDVQQIDBI3NyDQsy7QnNC+0YHQutCy0LAxCzAJBgNVBAYTAlJV
MU8wTQYDVQQDDEbQk9C+0LvQvtCy0L3QvtC5INGD0LTQvtGB0YLQvtCy0LXRgNGP
0Y7RidC40Lkg0YbQtdC90YLRgCDQodCS0KPQpiDQotCeMB4XDTE3MTAxNjA2MjAz
N1oXDTE5MTAxNjA2MzAzN1owggHaMR0wGwYJKoZIhvcNAQkBFg5kcm9ub3ZAYXNi
Yy5ydTEaMBgGCCqFAwOBAwEBEgwwMDc3MDM2MjA1OTMxFjAUBgUqhQNkAxILMTMy
MzUwMDU2MDUxGDAWBgUqhQNkARINMTA2Nzc2MTMyMzk1OTFuMGwGA1UECgxl0J7Q
ntCeINCQ0LLRgtC+0LzQsNGC0LjQt9C40YDQvtCy0LDQvdC90YvQtSDRgdC40YHR
gtC10LzRiyDQuCDQsdGO0LTQttC10YLQvdGL0Lkg0LrQvtC90YHQsNC70YLQuNC9
0LMxFTATBgNVBAcMDNCc0L7RgdC60LLQsDEcMBoGA1UECAwTNzcg0LMuINCc0L7R
gdC60LLQsDELMAkGA1UEBhMCUlUxLjAsBgNVBCoMJdCh0LXRgNCz0LXQuSDQktC7
0LDQtNC40LzQuNGA0L7QstC40YcxGTAXBgNVBAQMENCa0LDQv9C70YPQvdC+0LIx
bjBsBgNVBAMMZdCe0J7QniDQkNCy0YLQvtC80LDRgtC40LfQuNGA0L7QstCw0L3Q
vdGL0LUg0YHQuNGB0YLQtdC80Ysg0Lgg0LHRjtC00LbQtdGC0L3Ri9C5INC60L7Q
vdGB0LDQu9GC0LjQvdCzMGMwHAYGKoUDAgITMBIGByqFAwICJAAGByqFAwICHgED
QwAEQG8vIriPn+VO54BSqhAbE3SQI3/IKrBfRg86OaFdnOTixZYiyyhpv8aTQnck
tCBG18ndKwlKswrwG38E56JIlQujggWBMIIFfTAOBgNVHQ8BAf8EBAMCBPAwHQYD
VR0OBBYEFAsh6fS7ERipRkZuJbze4wCPMHwTMIIBYwYDVR0jBIIBWjCCAVaAFKQX
jOaHOlZNd0Vc8OmwBmSmLGmYoYIBKaSCASUwggEhMRowGAYIKoUDA4EDAQESDDAw
NzcxMDQ3NDM3NTEYMBYGBSqFA2QBEg0xMDQ3NzAyMDI2NzAxMR4wHAYJKoZIhvcN
AQkBFg9kaXRAbWluc3Z5YXoucnUxPDA6BgNVBAkMMzEyNTM3NSDQsy4g0JzQvtGB
0LrQstCwINGD0LsuINCi0LLQtdGA0YHQutCw0Y8g0LQuNzEsMCoGA1UECgwj0JzQ
uNC90LrQvtC80YHQstGP0LfRjCDQoNC+0YHRgdC40LgxFTATBgNVBAcMDNCc0L7R
gdC60LLQsDEcMBoGA1UECAwTNzcg0LMuINCc0L7RgdC60LLQsDELMAkGA1UEBhMC
UlUxGzAZBgNVBAMMEtCj0KYgMSDQmNChINCT0KPQpoIRBKgeQAWpGFyC5hESydxH
IGEwXAYDVR0lBFUwUwYIKwYBBQUHAwIGCCsGAQUFBwMEBgcqhQMDgVcLBgcqhQMD
gVcMBgcqhQMDgVcNBgcqhQMDgVcEBgcqhQMDgVcGBgcqhQMDgVcHBgcqhQMDgVcI
MHQGCSsGAQQBgjcVCgRnMGUwCgYIKwYBBQUHAwIwCgYIKwYBBQUHAwQwCQYHKoUD
A4FXCzAJBgcqhQMDgVcMMAkGByqFAwOBVw0wCQYHKoUDA4FXBDAJBgcqhQMDgVcG
MAkGByqFAwOBVwcwCQYHKoUDA4FXCDAdBgNVHSAEFjAUMAgGBiqFA2RxATAIBgYq
hQNkcQIwKwYDVR0QBCQwIoAPMjAxNzEwMTYwNjIwMzZagQ8yMDE5MTAxNjA2MjAz
NlowggEwBgUqhQNkcASCASUwggEhDCsi0JrRgNC40L/RgtC+0J/RgNC+IENTUCIg
KNCy0LXRgNGB0LjRjyA0LjApDCwi0JrRgNC40L/RgtC+0J/RgNC+INCj0KYiICjQ
stC10YDRgdC40LggMi4wKQxf0KHQtdGA0YLQuNGE0LjQutCw0YIg0YHQvtC+0YLQ
stC10YLRgdGC0LLQuNGPINCk0KHQkSDQoNC+0YHRgdC40Lgg0KHQpC8xMjQtMjg2
NCDQvtGCIDIwLjAzLjIwMTYMY9Ch0LXRgNGC0LjRhNC40LrQsNGCINGB0L7QvtGC
0LLQtdGC0YHRgtCy0LjRjyDQpNCh0JEg0KDQvtGB0YHQuNC4IOKEliDQodCkLzEy
OC0yODgxINC+0YIgMTIuMDQuMjAxNjA2BgUqhQNkbwQtDCsi0JrRgNC40L/RgtC+
0J/RgNC+IENTUCIgKNCy0LXRgNGB0LjRjyA0LjApMIGiBgNVHR8EgZowgZcwOqA4
oDaGNGh0dHA6Ly92dWMuY3VzdG9tcy5ydS9jZHAvZ29sb3Zub3lfdWNfc3Z1Y3Rv
XzEuMi5jcmwwWaBXoFWGU2h0dHA6Ly9zdnVjdG9zLmduaXZjLmVhaXMuY3VzdG9t
cy5ydS9pbWFnZXMvc3Rvcmllcy9maWxlL2dvbG92bm95X3VjX3N2dWN0b18xLjIu
Y3JsMIGzBggrBgEFBQcBAQSBpjCBozBABggrBgEFBQcwAoY0aHR0cDovL3Z1Yy5j
dXN0b21zLnJ1L2NkcC9nb2xvdm5veV91Y19zdnVjdG9fMS4yLmNydDBfBggrBgEF
BQcwAoZTaHR0cDovL3N2dWN0b3MuZ25pdmMuZWFpcy5jdXN0b21zLnJ1L2ltYWdl
cy9zdG9yaWVzL2ZpbGUvZ29sb3Zub3lfdWNfc3Z1Y3RvXzEuMi5jcnQwCAYGKoUD
AgIDA0EAzJVsgK9HU1Nca25p/04ufYfXouKzgvEX62v+PUnDI7D0NojMmE97tykJ
KYuYOoOtaTS2V8Uya1KcXPWiU0ALQg==</X509Certificate>
</X509Data>
</KeyInfo>
  </Signature>
</Envelope>

И вызываю Verify, получаю: Failed to verify signature. Error: An error was encountered while processing an XML digital signature. (0x800705BA)

В связи с этим вопросы:
1. Где я ошибаюсь?
2. Есть ли возможность в дебаге или ещё как-то увидеть хэш от SignedInfo при подписывании по шаблону(это по крайней мере бы исключило ошибку на этапе канонизации)?
3. Алгоритм подписи определяется по сертификату и в подписи по шаблону участвует только с целью информирования при проверке об алгоритме подписи?

Отредактировано пользователем 24 октября 2017 г. 13:50:22(UTC)  | Причина: Прикрепил не перевернутую строку.

Offline heavyside  
#5 Оставлено : 25 октября 2017 г. 13:54:07(UTC)
heavyside

Статус: Участник

Группы: Участники
Зарегистрирован: 26.11.2015(UTC)
Сообщений: 14
Российская Федерация
Откуда: Москва

Сказал(а) «Спасибо»: 11 раз
Попробовал изменить xml чтобы уменьшить вероятность неправильных преобразований - убрал из него все переносы. Хэш данных получаю правильный, дальше канонизирую SignedInfo, получаю:
Код:
<SignedInfo xmlns="http://www.w3.org/2000/09/xmldsig#"><CanonicalizationMethod Algorithm="http://www.w3.org/TR/2001/REC-xml-c14n-20010315"></CanonicalizationMethod><SignatureMethod Algorithm="http://www.w3.org/2001/04/xmldsig-more#gostr34102001-gostr3411"></SignatureMethod><Reference URI="#nodeID"><Transforms><Transform Algorithm="http://www.w3.org/2000/09/xmldsig#enveloped-signature"></Transform></Transforms><DigestMethod Algorithm="http://www.w3.org/2001/04/xmldsig-more#gostr3411"></DigestMethod><DigestValue>M1BO3FqOZzuKQUprrU7WLbs9R5aoMKTuKr5Xcu38yYs=</DigestValue></Reference></SignedInfo>

Кодирую в Base64, получаю хэш:
Код:
80F10DDF555F5B471D2E108217D3BC19546AB8737DCC9125845BA72EB8FF9270

Теперь Получаю подпись этого хэша. Ну например:
Код:
9932E52A50235C0AE32ADC2CDC247383DDE5086D8DAD57A92DE670961349D5A8C234ED8DE8172AEDAAA9D36A63D06D285FDFD53EC307718F4AB30487D23D91E4

Теперь её надо перевернуть. Просмотрел много тем(да и стандарт) и так и не могу сказать что понял как переворачивать. Вроде бы согласно этой теме
Код:
function reverseStr(str) {
var newStr = '', i;
for (i = str.length - 1; i >= 0; i--) {
newStr += str.charAt(i);
}
return newStr;
}

function hex2bin(hex)
{
var bytes = [], str;
for(var i=0; i< hex.length-1; i+=2)
bytes.push(parseInt(hex.substr(i, 2), 16));
return String.fromCharCode.apply(String, bytes); 
}
var bin = hex2bin("9932E52A50235C0AE32ADC2CDC247383DDE5086D8DAD57A92DE670961349D5A8C234ED8DE8172AEDAAA9D36A63D06D285FDFD53EC307718F4AB30487D23D91E4");
bin = reverseStr(bin);

у меня получается такая строка:
Код:
ä‘=҇³JqÃ>Õß_(mÐcjÓ©ªí*èí4¨ÕI–pæ-©W­må݃s$Ü,Ü*ã
\#P*å2™

т.е. получаем hex, переводим в bin и дальше строку посимвольно переворачиваем.

Может кто-нибудь проверить корректность этого преобразования? Или просто для данной строки выдать корректный base64.

И ещё прошу для xml
Код:
<?xml version="1.0" encoding="UTF-8"?>
<Envelope xmlns="urn:envelope"><Data>Hello, World!</Data><Node xml:id="nodeID">Hello, Node!</Node><Signature xmlns="http://www.w3.org/2000/09/xmldsig#"><SignedInfo><CanonicalizationMethod Algorithm="http://www.w3.org/TR/2001/REC-xml-c14n-20010315"/><SignatureMethod Algorithm="http://www.w3.org/2001/04/xmldsig-more#gostr34102001-gostr3411"/><Reference URI="#nodeID"><Transforms><Transform Algorithm="http://www.w3.org/2000/09/xmldsig#enveloped-signature"/></Transforms><DigestMethod Algorithm="http://www.w3.org/2001/04/xmldsig-more#gostr3411"/><DigestValue>M1BO3FqOZzuKQUprrU7WLbs9R5aoMKTuKr5Xcu38yYs=</DigestValue></Reference></SignedInfo><SignatureValue/><KeyInfo>
<X509Data>
<X509Certificate>MIIKAjCCCbGgAwIBAgIRAuGy2XrEDNGA5xE7srknKIIwCAYGKoUDAgIDMIIBozEg
MB4GCSqGSIb3DQEJARYRdnVjQGNhLmN1c3RvbXMucnUxGjAYBggqhQMDgQMBARIM
MDA3NzMwNjU0NDcxMRgwFgYFKoUDZAESDTExMTc3NDY4ODk5NDExezB5BgNVBAoM
ctCm0LXQvdGC0YDQsNC70YzQvdC+0LUg0LjQvdGE0L7RgNC80LDRhtC40L7QvdC9
0L4t0YLQtdGF0L3QuNGH0LXRgdC60L7QtSDRgtCw0LzQvtC20LXQvdC90L7QtSDR
g9C/0YDQsNCy0LvQtdC90LjQtTE6MDgGA1UECQwx0L/Quy7QmtC+0LzRgdC+0LzQ
vtC70YzRgdC60LDRjyDQtC4xINC60L7RgNC/LiDQkDEVMBMGA1UEBwwM0JzQvtGB
0LrQstCwMRswGQYDVQQIDBI3NyDQsy7QnNC+0YHQutCy0LAxCzAJBgNVBAYTAlJV
MU8wTQYDVQQDDEbQk9C+0LvQvtCy0L3QvtC5INGD0LTQvtGB0YLQvtCy0LXRgNGP
0Y7RidC40Lkg0YbQtdC90YLRgCDQodCS0KPQpiDQotCeMB4XDTE3MTAxNjA2MjAz
N1oXDTE5MTAxNjA2MzAzN1owggHaMR0wGwYJKoZIhvcNAQkBFg5kcm9ub3ZAYXNi
Yy5ydTEaMBgGCCqFAwOBAwEBEgwwMDc3MDM2MjA1OTMxFjAUBgUqhQNkAxILMTMy
MzUwMDU2MDUxGDAWBgUqhQNkARINMTA2Nzc2MTMyMzk1OTFuMGwGA1UECgxl0J7Q
ntCeINCQ0LLRgtC+0LzQsNGC0LjQt9C40YDQvtCy0LDQvdC90YvQtSDRgdC40YHR
gtC10LzRiyDQuCDQsdGO0LTQttC10YLQvdGL0Lkg0LrQvtC90YHQsNC70YLQuNC9
0LMxFTATBgNVBAcMDNCc0L7RgdC60LLQsDEcMBoGA1UECAwTNzcg0LMuINCc0L7R
gdC60LLQsDELMAkGA1UEBhMCUlUxLjAsBgNVBCoMJdCh0LXRgNCz0LXQuSDQktC7
0LDQtNC40LzQuNGA0L7QstC40YcxGTAXBgNVBAQMENCa0LDQv9C70YPQvdC+0LIx
bjBsBgNVBAMMZdCe0J7QniDQkNCy0YLQvtC80LDRgtC40LfQuNGA0L7QstCw0L3Q
vdGL0LUg0YHQuNGB0YLQtdC80Ysg0Lgg0LHRjtC00LbQtdGC0L3Ri9C5INC60L7Q
vdGB0LDQu9GC0LjQvdCzMGMwHAYGKoUDAgITMBIGByqFAwICJAAGByqFAwICHgED
QwAEQG8vIriPn+VO54BSqhAbE3SQI3/IKrBfRg86OaFdnOTixZYiyyhpv8aTQnck
tCBG18ndKwlKswrwG38E56JIlQujggWBMIIFfTAOBgNVHQ8BAf8EBAMCBPAwHQYD
VR0OBBYEFAsh6fS7ERipRkZuJbze4wCPMHwTMIIBYwYDVR0jBIIBWjCCAVaAFKQX
jOaHOlZNd0Vc8OmwBmSmLGmYoYIBKaSCASUwggEhMRowGAYIKoUDA4EDAQESDDAw
NzcxMDQ3NDM3NTEYMBYGBSqFA2QBEg0xMDQ3NzAyMDI2NzAxMR4wHAYJKoZIhvcN
AQkBFg9kaXRAbWluc3Z5YXoucnUxPDA6BgNVBAkMMzEyNTM3NSDQsy4g0JzQvtGB
0LrQstCwINGD0LsuINCi0LLQtdGA0YHQutCw0Y8g0LQuNzEsMCoGA1UECgwj0JzQ
uNC90LrQvtC80YHQstGP0LfRjCDQoNC+0YHRgdC40LgxFTATBgNVBAcMDNCc0L7R
gdC60LLQsDEcMBoGA1UECAwTNzcg0LMuINCc0L7RgdC60LLQsDELMAkGA1UEBhMC
UlUxGzAZBgNVBAMMEtCj0KYgMSDQmNChINCT0KPQpoIRBKgeQAWpGFyC5hESydxH
IGEwXAYDVR0lBFUwUwYIKwYBBQUHAwIGCCsGAQUFBwMEBgcqhQMDgVcLBgcqhQMD
gVcMBgcqhQMDgVcNBgcqhQMDgVcEBgcqhQMDgVcGBgcqhQMDgVcHBgcqhQMDgVcI
MHQGCSsGAQQBgjcVCgRnMGUwCgYIKwYBBQUHAwIwCgYIKwYBBQUHAwQwCQYHKoUD
A4FXCzAJBgcqhQMDgVcMMAkGByqFAwOBVw0wCQYHKoUDA4FXBDAJBgcqhQMDgVcG
MAkGByqFAwOBVwcwCQYHKoUDA4FXCDAdBgNVHSAEFjAUMAgGBiqFA2RxATAIBgYq
hQNkcQIwKwYDVR0QBCQwIoAPMjAxNzEwMTYwNjIwMzZagQ8yMDE5MTAxNjA2MjAz
NlowggEwBgUqhQNkcASCASUwggEhDCsi0JrRgNC40L/RgtC+0J/RgNC+IENTUCIg
KNCy0LXRgNGB0LjRjyA0LjApDCwi0JrRgNC40L/RgtC+0J/RgNC+INCj0KYiICjQ
stC10YDRgdC40LggMi4wKQxf0KHQtdGA0YLQuNGE0LjQutCw0YIg0YHQvtC+0YLQ
stC10YLRgdGC0LLQuNGPINCk0KHQkSDQoNC+0YHRgdC40Lgg0KHQpC8xMjQtMjg2
NCDQvtGCIDIwLjAzLjIwMTYMY9Ch0LXRgNGC0LjRhNC40LrQsNGCINGB0L7QvtGC
0LLQtdGC0YHRgtCy0LjRjyDQpNCh0JEg0KDQvtGB0YHQuNC4IOKEliDQodCkLzEy
OC0yODgxINC+0YIgMTIuMDQuMjAxNjA2BgUqhQNkbwQtDCsi0JrRgNC40L/RgtC+
0J/RgNC+IENTUCIgKNCy0LXRgNGB0LjRjyA0LjApMIGiBgNVHR8EgZowgZcwOqA4
oDaGNGh0dHA6Ly92dWMuY3VzdG9tcy5ydS9jZHAvZ29sb3Zub3lfdWNfc3Z1Y3Rv
XzEuMi5jcmwwWaBXoFWGU2h0dHA6Ly9zdnVjdG9zLmduaXZjLmVhaXMuY3VzdG9t
cy5ydS9pbWFnZXMvc3Rvcmllcy9maWxlL2dvbG92bm95X3VjX3N2dWN0b18xLjIu
Y3JsMIGzBggrBgEFBQcBAQSBpjCBozBABggrBgEFBQcwAoY0aHR0cDovL3Z1Yy5j
dXN0b21zLnJ1L2NkcC9nb2xvdm5veV91Y19zdnVjdG9fMS4yLmNydDBfBggrBgEF
BQcwAoZTaHR0cDovL3N2dWN0b3MuZ25pdmMuZWFpcy5jdXN0b21zLnJ1L2ltYWdl
cy9zdG9yaWVzL2ZpbGUvZ29sb3Zub3lfdWNfc3Z1Y3RvXzEuMi5jcnQwCAYGKoUD
AgIDA0EAzJVsgK9HU1Nca25p/04ufYfXouKzgvEX62v+PUnDI7D0NojMmE97tykJ
KYuYOoOtaTS2V8Uya1KcXPWiU0ALQg==</X509Certificate>
</X509Data>
</KeyInfo></Signature></Envelope>


дать канонизированное представление SignedInfo
Offline roman84  
#6 Оставлено : 17 октября 2018 г. 20:04:13(UTC)
roman84

Статус: Новичок

Группы: Участники
Зарегистрирован: 24.10.2017(UTC)
Сообщений: 7
Российская Федерация
Откуда: Москва

Сказал(а) «Спасибо»: 3 раз
Добрый день! Получилось ли у вас в итоге проверить подпись?
Я завёл аналогиченое обсуждение https://www.cryptopro.ru...aspx?g=posts&t=14379
Столкнулся с такой же проблемой что и Вы.
RSS Лента  Atom Лента
Пользователи, просматривающие эту тему
Быстрый переход  
Вы не можете создавать новые темы в этом форуме.
Вы не можете отвечать в этом форуме.
Вы не можете удалять Ваши сообщения в этом форуме.
Вы не можете редактировать Ваши сообщения в этом форуме.
Вы не можете создавать опросы в этом форуме.
Вы не можете голосовать в этом форуме.