Как преобразовать публичный ключ rsa PKCS8 в PKCS1 на c#?
Всем привет. У меня имеется открытый ключ в формате pkcs8, полученный от клиента, написанного на js. Мне необходимо зашифровать им пароль для аутентификации пользователя на сервере, который написан на c# (asp.net core), а после вернуть клиенту. Проблема в том, что я не нашёл в классе RSACryptoServiceProvider какого-либо функционала для исправления ситуации. Ну или, быть может, есть какая-то другая библиотека для шифрования rsa под js, не jsencrypt, которая использует pkcs1? Заранее спасибо
Код клиента для отправки публичного ключа
const crypter = new JSEncrypt();
const priv_key = crypter.getPrivateKey();
const public_key = crypter.getPublicKey();
async function signUp(nickname) {
console.log(public_key);
return await fetch("https://localhost:3000/signUp/" + nickname, {
method: 'POST',
headers: {
'Content-Type': 'text/plain'
},
body: public_key
});
}
Пример возвращаемого ключа
-----BEGIN PUBLIC KEY-----
MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDGOV48J0tbezC/TBwcXwyTloZJ
slsLIdm/rvKMnMX4q3QqQwKtzOqiqIvRu6qbQ1Tm/t5DnTeHrtVgH4Y3e5sRz5Pb
9GvQJ1QgyHCiGPDNch04AtKn5sjcd/5BiefhuAFGLopPTNPUAIdahRpLPsQnKPUI
f4cL/2A+O7gNn62sfwIDAQAB
-----END PUBLIC KEY-----
Ответы (1 шт):
Спасибо, aepot, за наводку. Я нашёл, что мне нужно. Библиотека называется OpenSSL.PublicKeyDecoder. Как раз преобразует публичный ключ pkcs8 в pkcs1. Если что, есть ещё и другая OpenSSL.PrivateKeyDecoder, преобразующая соответственно, приватный ключ.
Upd. Если вы хотите совершить преобразование (pkcs1 в pkcs8), воспользуйтесь этим репозиторием. Скопипастите проект Charp-easy-rsa-pem, соберите его как библиотеку, а после вызовите сл. функцию: Crypto.ExportPublicKeyToX509PEM(rsa),(rsa-объект класса-наследника RSA), которая вам возвратит публичный ключ формата pkcs8. Надеюсь, это кому-нибудь поможет.