Впервые работаю с шифрованием, прошу сильно не ругать.(AX2009, .NET 3.5)
В контейнере лежит сертификат CertificateEncryption, необходимо преобразовать его в формат ГОСТ 34.10(CryptoPro.Sharpei.Gost3410) используя публичный ключ. Буду рад любому совету.
Код:
byte[] encryptedKey = CPEncryptedXml.EncryptKey(sessionKey, (Gost3410)CertificateEncryption.PublicKey.Key);
В C# это выглядит довольно просто:
Код:
// Создаем случайный симметричный ключ.
// В целях безопасности удаляем ключ из памяти после использования.
using (Gost28147CryptoServiceProvider sessionKey = new Gost28147CryptoServiceProvider())
{
// Создаем объект класса EncryptedXml
EncryptedXml eXml = new EncryptedXml();
// Зашифроваем узел на симметричном ключе.
byte[] encryptedElement = eXml.EncryptData(elementToEncrypt, sessionKey, false);
// Зашифровываем сессионный ключ и добавляем эти зашифрованные данные к узлу EncryptedKey.
EncryptedKey ek = new EncryptedKey();
byte[] encryptedKey = CPEncryptedXml.EncryptKey(sessionKey, (Gost3410)CertificateEncryption.PublicKey.Key);
ek.CipherData = new CipherData(encryptedKey);
ek.EncryptionMethod = new EncryptionMethod(CPEncryptedXml.XmlEncGostKeyTransportUrl);
KeyInfoX509Data data = new KeyInfoX509Data(CertificateOpen);
ek.KeyInfo.AddClause(data);
// Добавляем ссылку на зашифрованный ключ к зашифрованным данным.
edElement.KeyInfo.AddClause(new KeyInfoEncryptedKey(ek));
// Добавляем зашифрованные данные к объекту EncryptedData.
edElement.CipherData.CipherValue = encryptedElement;
}