AlexMAS / GostCryptography

.NET driver for ViPNet CSP and CryptoPro CSP
MIT License
132 stars 42 forks source link

Расшифровка с помощью сертификата #34

Closed rashuf closed 4 years ago

rashuf commented 4 years ago

Здравствуйте! Имеется сертификат и закрытый ключ к нему. Как расшифровать строку, зашифрованную этим сертификатом? Ассиметричное шифрование подразумевает, что шифруется открытым ключом, а расшифровывается закрытым. Пробовал делать разными способами с помощью Вашей библиотеки, но результат один и тот же - ошибка

ASN.1 encoded byte array contains invalid structure 'Gost_R3410_KeyTransport'

Один из способов:

public static byte[] DecryptKey(string encDataInbase64, X509Certificate2 cert)
{
    Gost_R3410_2012_256_AsymmetricAlgorithm assymAlgorithm = cert.GetPrivateKeyAlgorithm() as 
    Gost_R3410_2012_256_AsymmetricAlgorithm;
    SymmetricAlgorithm sessionKey = GostEncryptedXml.DecryptKey(Convert.FromBase64String(encDataInbase64), assymAlgorithm);
    return sessionKey.Key;
}

Пожалуйста, подскажите, что я делаю не так? PS: расшифровка нужна на этапе 2 аутентификации по руководству https://docs-ke.readthedocs.io/ru/latest/auth/%D0%BF%D0%BE%20%D1%81%D0%B5%D1%80%D1%82%D0%B8%D1%84%D0%B8%D0%BA%D0%B0%D1%82%D1%83.html

AlexMAS commented 4 years ago

Здравствуйте. Судя по документации, сообщение передается в формате PKCS#7. Попробуйте воспользоваться примером SignedCmsSignTest.cs.

rashuf commented 4 years ago

Спасибо за быстрый ответ! Оказывается, расшифровка проходила нормально. Использовал

public static byte[] DecryptKey2(string encDataInBase64)
{
    var envelopedCms = new EnvelopedCms();

    // Чтение сообщения CMS/PKCS#7
    envelopedCms.Decode(Convert.FromBase64String(encDataInBase64));

    // Расшифровка сообщения CMS/PKCS#7
    envelopedCms.Decrypt(envelopedCms.RecipientInfos[0]);

    byte[] bytes = envelopedCms.ContentInfo.Content;

    return bytes;
}

Проблема была в неправильной отправке POST-запроса. Благодарю!