Перевести .NET 6 в .NET 4.8 ImportRSAPrivateKey в C# не существуетC#

Место общения программистов C#
Ответить
Anonymous
 Перевести .NET 6 в .NET 4.8 ImportRSAPrivateKey в C# не существует

Сообщение Anonymous »

Я пытаюсь перевести этот код C# .NET 6.0 для работы на .NET 4.8. Я пытаюсь получить токен, используя PEM-файл закрытого ключа RSA. Но мне это не удалось.
Пожалуйста, может кто-нибудь мне помочь?
У меня проблема с методом ImportRSAPrivateKey. Его нет в .NET 4.8. Как я могу изменить этот метод ImportRSAPrivateKey?
Это важный метод, но есть ли в .NET 4.8 какой-либо другой пакет, который может помочь изменить этот метод?
using System;
using System.IO;
using System.Net.Http;
using System.Security.Cryptography;
using System.Text;
using System.Text.Json;

namespace toto.Auth
{
public class AuthRequestService
{
private const string DATE_PATTERN = "yyyy-MM-ddTHH:mm:ss.fffK";
private const string ODC_AUTH_URL = "https://myurl/auth";

private FileInfo certFile;
private string partnerId;
private RSA privateKey;

private JsonSerializerOptions jsonOptions = new JsonSerializerOptions { PropertyNamingPolicy = JsonNamingPolicy.CamelCase };

public AuthRequestService(string certFilePath, string partnerId)
{
this.certFile = new FileInfo(certFilePath);
this.privateKey = ReadPKCS8PrivateKey(certFile);
this.partnerId = partnerId;
}

public string GetTokenForRPPS(string rpps)
{
var timeStamp = DateTime.UtcNow.ToString(DATE_PATTERN);

var body = new AuthRequestDTO(partnerId, rpps, timeStamp);

string result = string.Empty;

try
{
using (var privateSignature = new RSACryptoServiceProvider())
{
privateSignature.ImportRSAPrivateKey(privateKey.ExportRSAPrivateKey(), out _);

Console.WriteLine("unsigned json:");
var unsignedJson = JsonSerializer.Serialize(body, jsonOptions);
Console.WriteLine(unsignedJson);

var signatureBytes = privateSignature.SignData(Encoding.UTF8.GetBytes(unsignedJson), HashAlgorithmName.SHA512, RSASignaturePadding.Pkcs1);
string signB64 = Convert.ToBase64String(signatureBytes);
body.Signature = signB64;

string signedPayload = JsonSerializer.Serialize(body, jsonOptions);

Console.WriteLine("signed json:");
Console.WriteLine(signedPayload);

using (HttpClient httpClient = new HttpClient())
{
var httpRequest = new HttpRequestMessage(HttpMethod.Post, ODC_AUTH_URL)
{
Content = new StringContent(signedPayload, Encoding.UTF8, "application/json")
};

var response = httpClient.SendAsync(httpRequest).Result;

result = response.Content.ReadAsStringAsync().Result;
}
}
}
catch (Exception e)
{
Console.WriteLine(e);
}

return result;
}

protected RSA ReadPKCS8PrivateKey(FileInfo file)
{
string key = File.ReadAllText(file.FullName);
string privateKeyPEM = key
.Replace("-----BEGIN RSA PRIVATE KEY-----", "")
.Replace(Environment.NewLine, "")
.Replace("-----END RSA PRIVATE KEY-----", "");

byte[] encoded = Convert.FromBase64String(privateKeyPEM);
return RSA.Create();
}
}
}


Подробнее здесь: https://stackoverflow.com/questions/793 ... -not-exist
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C#»