Я пытаюсь перевести этот код 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
Перевести .NET 6 в .NET 4.8 ImportRSAPrivateKey в C# не существует ⇐ C#
Место общения программистов C#
-
Anonymous
1735201581
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();
}
}
}
Подробнее здесь: [url]https://stackoverflow.com/questions/79308456/translate-net-6-to-net-4-8-importrsaprivatekey-in-c-sharp-does-not-exist[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия