Вынужден переводить кусок кода с JS на C#, и наткнулся там на такой вот момент:
var decrypt = new JSEncrypt();
decrypt.setPrivateKey("Здесь Base64-строка, представляющая приватный ключ");
var result = decrypt.decrypt("Здесь Base64-строка, представляющая зашифрованный текст");
И что-то никак не могу найти чего-то настолько же компактного в родном .NET: все стандартные инструменты просят ключ в xml-формате, для создания которого требуется вытянуть из строки ключа определенные данные (modulus, exponent etc)...
В общем, вопрос таков: какие инструменты можно использовать, чтобы расшифровать текст по приватному ключу в Base64-формате?
Собственно, помогла мне следующая чудесная библиотека - BouncyCastle
Код вышел довольно простой и короткий:
private static string DecryptText(string Base64Text, string PrivateKey, Encoding Encoding)
{
AsymmetricCipherKeyPair keyPair;
using (StringReader reader = new StringReader($"-----BEGIN RSA PRIVATE KEY-----\r\n{PrivateKey}\r\n-----END RSA PRIVATE KEY-----")) // file containing RSA PKCS1 private key
keyPair = (AsymmetricCipherKeyPair)new PemReader(reader).ReadObject();
Pkcs1Encoding decryptEngine = new Pkcs1Encoding(new RsaEngine());
decryptEngine.Init(false, keyPair.Private);
byte[] bytes = Convert.FromBase64String(Base64Text);
return Encoding.GetString(decryptEngine.ProcessBlock(bytes, 0, bytes.Length));
}
Надеюсь, кому-нибудь сие тоже когда-нибудь пригодится)
Основные этапы разработки сайта для стоматологической клиники
Продвижение своими сайтами как стратегия роста и независимости