2010-08-25 2 views
0

Мне удалось шифровать XML-документ, зашифровав элемент, а затем заменив элемент на зашифрованные данные. A показан в примере кода ниже.Шифрование нескольких элементов одного документа xml

Public Shared Sub Encrypt(ByVal textReader As TextReader, ByVal textWriter As TextWriter, ByVal certificateName As String) 
    Dim xmlDoc As New XmlDocument() 
    xmlDoc.Load(textReader) 
    ' Add the schema from Resources 
    AddSchema(xmlDoc) 
    ' Get all elements to encrypt 
    Dim elementsToEncrypt As List(Of XmlElement) = FindElementsToEncrypt(xmlDoc.DocumentElement) 

    ' Get the certificate 
    Dim certificate As X509Certificate2 = FindTrustedCertificate(certificateName) 
    If certificate Is Nothing Then 
     Throw New ArgumentException(String.Format("Certificate {0} not found", certificateName), "certificateName") 
    End If 

    Dim xmlEncrypter As New EncryptedXml(xmlDoc) 

    ' Itterate all elelemts to encrypt 
    For Each elementToEncrypt As XmlElement In elementsToEncrypt 
     ' Encrypt the elements with the given certificate 
     Dim encryptedData As EncryptedData = xmlEncrypter.Encrypt(elementToEncrypt, certificate) 
     EncryptedXml.ReplaceElement(elementToEncrypt, encryptedData, False) 
    Next 

    ' Return the encrypted XmlDocument 
    xmlDoc.Save(textWriter) 
End Sub 

Это приводит к XML, где элемент имеет EncryptedData, держа сертификат X509, как (я удалил объемные данные):

 <EncryptedData Type="http://www.w3.org/2001/04/xmlenc#Element" xmlns="http://www.w3.org/2001/04/xmlenc#"> 
    <EncryptionMethod Algorithm="http://www.w3.org/2001/04/xmlenc#aes256-cbc" /> 
    <KeyInfo xmlns="http://www.w3.org/2000/09/xmldsig#"> 
     <EncryptedKey xmlns="http://www.w3.org/2001/04/xmlenc#"> 
     <EncryptionMethod Algorithm="http://www.w3.org/2001/04/xmlenc#rsa-1_5" /> 
     <KeyInfo xmlns="http://www.w3.org/2000/09/xmldsig#"> 
      <X509Data> 
      <X509Certificate>MIIFU......</X509Certificate> 
      </X509Data> 
     </KeyInfo> 
     <CipherData> 
      <CipherValue>dQOzeY81I9XAz......</CipherValue> 
     </CipherData> 
     </EncryptedKey> 
    </KeyInfo> 
    <CipherData> 
     <CipherValue>qfmuwmyrpMOK.....</CipherValue> 
    </CipherData> 
    </EncryptedData> 

Если я шифровать 2 из этих элементов, то же Х509 Сертификат включен дважды.

Кто-нибудь знает о решении, в котором, например, упоминается сертификация?

Спасибо,

Bert Heesbeen

ответ

0

Жаль, что никто не дал мне ответ. Мне понадобилось некоторое время, но я справился сам.

Я создал код для создания ключа сеанса Rijndael. Используйте этот ключ для каждого элемента для шифрования и ссылки на этот ключ. В последнем элементе EncryptedData я включаю зашифрованный ключ rsa session и ссылку на сертификат x509.

Это работает. Bert

Смежные вопросы