Я пытаюсь расшифровать мыльное сообщение, но получаю следующую ошибку:
Unable to retrieve the decryption key
var doc = new XmlDocument();
doc.PreserveWhitespace = true;
doc.Load(stream);
var en = new EncryptedXml(doc);
en.AddKeyNameMapping(KeyName, Alg);
en.DecryptDocument();
Я добавил сертификат в свой локальный ящик. Надо ли их где-то указывать? Я добавил XML-документ. Итак, каким будет имя ключа и алгоритм? Имя ключа то, что находится в хранилище ключей? Алгоритм - это то, что находится в XML-документе (sha1, который вы можете увидеть в документе под тегом DigestMethod Algorithm)?
<s:Envelope
xmlns:s = "http://www.w3.org/2003/05/soap-envelope"
xmlns:u = "http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd">
<s:Header>
<VsDebuggerCausalityData
xmlns = "http://schemas.microsoft.com/vstudio/diagnostics/servicemodelsink">uIDPo4tYpt6X40FEk+VSAe5mc8MAAAAAP497cBuXfk+uFIOY80O0iuLtIW56q7hLktgVYPhbnHMACQAA
</VsDebuggerCausalityData>
<o:Security s:mustUnderstand = "1"
xmlns:o = "http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd">
<o:BinarySecurityToken u:Id = "uuid-10490fb0-8ee0-4a4c-a8db-77242c9a3b7f-2" ValueType = "http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-x509-token-profile-1.0#X509v3" EncodingType = "http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-soap-message-security-1.0#Base64Binary">MIIF+TCCBOGgAwIBAgIQIWv3OdE866kXP/....t</o:BinarySecurityToken>
<e:EncryptedKey Id = "_0"
xmlns:e = "http://www.w3.org/2001/04/xmlenc#">
<e:EncryptionMethod Algorithm = "http://www.w3.org/2001/04/xmlenc#rsa-oaep-mgf1p">
<DigestMethod Algorithm = "http://www.w3.org/2000/09/xmldsig#sha1"
xmlns = "http://www.w3.org/2000/09/xmldsig#" />
</e:EncryptionMethod>
<KeyInfo
xmlns = "http://www.w3.org/2000/09/xmldsig#">
<o:SecurityTokenReference>
<o:KeyIdentifier ValueType = "http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-x509-token-profile-1.0#X509SubjectKeyIdentifier" EncodingType = "http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-soap-message-security-1.0#Base64Binary">j0ZKFBmTz3Kj0cQ82rq63MYAR+0=</o:KeyIdentifier>
</o:SecurityTokenReference>
</KeyInfo>
<e:CipherData>
<e:CipherValue>ANCElFZ5v....==</e:CipherValue>
</e:CipherData>
<e:ReferenceList>
<e:DataReference URI = "#_2" />
</e:ReferenceList>
</e:EncryptedKey>
<Signature
xmlns = "http://www.w3.org/2000/09/xmldsig#">
<SignedInfo>
<CanonicalizationMethod Algorithm = "http://www.w3.org/2001/10/xml-exc-c14n#" />
<SignatureMethod Algorithm = "http://www.w3.org/2000/09/xmldsig#rsa-sha1" />
<Reference URI = "#_1">
<Transforms>
<Transform Algorithm = "http://www.w3.org/2001/10/xml-exc-c14n#" />
</Transforms>
<DigestMethod Algorithm = "http://www.w3.org/2000/09/xmldsig#sha1" />
<DigestValue>akiomlPdi6j1h6r9NDqmh9G1GD0=</DigestValue>
</Reference>
</SignedInfo>
<SignatureValue>LIjqWD/BXsoA0XNR7hv...==</SignatureValue>
<KeyInfo>
<o:SecurityTokenReference>
<o:Reference ValueType = "http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-x509-token-profile-1.0#X509v3" URI = "#uuid-10490fb0-8ee0-4a4c-a8db-77242c9a3b7f-2" />
</o:SecurityTokenReference>
</KeyInfo>
</Signature>
</o:Security>
</s:Header>
<s:Body u:Id = "_1">
<e:EncryptedData Id = "_2" Type = "http://www.w3.org/2001/04/xmlenc#Content"
xmlns:e = "http://www.w3.org/2001/04/xmlenc#">
<e:EncryptionMethod Algorithm = "http://www.w3.org/2001/04/xmlenc#aes128-cbc" />
<e:CipherData>
<e:CipherValue>3kESnJnhc8K.....</e:CipherValue>
</e:CipherData>
</e:EncryptedData>
</s:Body>
</s:Envelope>
Вам нужно предоставить гораздо больше деталей. Также выберите подходящие теги.
Я добавил XML-документ. Простите.
@RB Я немного не понимаю, как использовать AddKeyNameMapping с точки зрения сертификата. В большинстве примеров указано, что он будет получен из местных сертификатов. У меня есть сертификаты, установленные на моем компьютере, но он все еще не работает. Любые идеи? В этом примере также говорится, что он должен читать его из локального хранилища stackoverflow.com/questions/45059848/….





пример в документации показывает, что Требуется вызов AddKeyNameMapping, иначе как он узнает, какой алгоритм дешифрования использовать?