Использует ли EncryptedXml.EncryptData аутентифицированное шифрование?Я использую этот алгоритм идентификаторов http://www.w3.org/2001/04/xmlenc#aes256-cbc.
Я знаю, что aes256-cbc
не аутентифицирован, но System.Security.Cryptography.Xml.EncryptedXml
выполняет какую-либо аутентификацию?Если нет, когда я выполняю аутентификацию, например, с помощью HMAC-SHA-512
, как я могу передать это значение в XmlDocument?
Отличается ли http://www.w3.org/2001/04/xmlenc#rsa-1_5 в области аутентифицированного шифрования?
Моя реализация
public byte[] Encrypt(byte[] data, byte[] key)
{
using (var symmetricAlgorithm = new RijndaelManaged())
{
symmetricAlgorithm.Key = key;
var xmlDocument = new XmlDocument();
var dataElement = xmlDocument.CreateElement("Data");
dataElement.InnerText = Convert.ToBase64String(data);
xmlDocument.AppendChild(dataElement);
var encryptedElementData = (new EncryptedXml()).EncryptData(dataElement, symmetricAlgorithm, false);
var encryptedData = new EncryptedData
{
Type = EncryptedXml.XmlEncElementUrl,
EncryptionMethod = new EncryptionMethod(EncryptedXml.XmlEncAES256Url),
CipherData = { CipherValue = encryptedElementData }
};
EncryptedXml.ReplaceElement(dataElement, encryptedData, false);
using (var encryptedXmlStream = new MemoryStream())
{
xmlDocument.Save(encryptedXmlStream);
return encryptedXmlStream.ToArray();
}
}
}