Open Uriel6575 opened 5 years ago
Это странно, т.к. алгоритм симметричного шифрования не менялся и должен поддерживаться всеми криптопровпйдерами. Может, конечно, в новых версиях CryptoPro что-то изменилось. Можете сказать, какая у вас версия и привести пример кода.
Да, есть ещё вариант, что от GostSymmetricAlgorithm.ProviderType
зависит другой код, нужно посмотреть. Но пример использования был бы кстати. :)
Да всё просто, собственно. Или я что-то не так делаю?
using System;
using System.Net;
using System.Security.Cryptography.X509Certificates;
using System.Xml;
using GostCryptography.Base;
using GostCryptography.Config;
using GostCryptography.Gost_28147_89;
using GostCryptography.Xml;
namespace CryptoSample {
internal class Program {
public static void Main() {
var fssCertUri = new Uri("https://cabinets.fss.ru/FSS_PROD_CERT_2019_34.10-2012.cer");
var fssCertBytes = new WebClient().DownloadData(fssCertUri);
var fssCert = new X509Certificate2(fssCertBytes);
GostCryptoConfig.ProviderType_2012_512 = ProviderType.CryptoPro_2012_512;
var xml = new XmlDocument();
xml.LoadXml("<Test />");
using (var gost28147 = new Gost_28147_89_SymmetricAlgorithm())
GostEncryptedXml.EncryptKey(gost28147, (GostAsymmetricAlgorithm)fssCert.GetPublicKeyAlgorithm());
}
}
}
Ах да, прошу прощения. КриптоПро CSP 4.0.9963 ViPNet CSP 4.2 (8.51670)
И снова приветствую!
Не уверен, что это баг, но с виду выглядит, что так. Последовал данному в другом вопросе совету и убрал передачу типа провайдера в конструкторы алгоритмов. Использую соответствующие свойства
GostCryptoConfig
.И тут вдруг выяснилось, что сломалось шифрование на сертификат ФСС, выпущенный по новым ГОСТам. Лечится это явной передачей
CryptoPro_2012_512
в конструкторGost_28147_89_SymmetricAlgorithm
. Решил посмотреть, что происходит по-умолчанию и дошёл вот до этого куска:Но ведь если шифрование идёт на новый ГОСТ, то надо брать значение не из
ProviderType
, а изProviderType_2012_5121
илиProviderType_2012_1024
. Не знаю, можно ли с этим что-то сделать, но поведение странное.