Как установить приватный ключ для CmsSigner в .net 4.8
Я хотел писать Sign метод, но я пишу в .net framework поэтому CmsSigner класс не имеет проперти PrivateKey. как мне устоновить ключ
public byte[] Sign(byte[] messageBytes, string certPemFile, string keyPemFile, bool includeCertificate = false)
{
// Загружаем сертификат из файла PEM
var cert = LoadCertificateFromPemFile(certPemFile);
// Загружаем ключ из файла PEM
var key = LoadKeyFromPemFile(keyPemFile);
// Создаем объект CmsSigner, используя сертификат и ключ
var signer = new CmsSigner(cert);
signer.PrivateKey = key;
// Создаем объект ContentInfo, используя сообщение
var contentInfo = new ContentInfo(messageBytes);
// Создаем объект SignedCms, используя ContentInfo
var cms = new SignedCms(contentInfo);
// Вычисляем подпись, используя CmsSigner
cms.ComputeSignature(signer);
// Удаляем сертификат из подписи, если не нужно его включать
if (includeCertificate is false)
cms.RemoveCertificate(cert);
// Возвращаем байты подписи
return cms.Encode();
}
public static X509Certificate2 LoadCertificateFromPemFile(string certPemFile)
{
// Читаем содержимое файла PEM
var certPem = File.ReadAllText(certPemFile);
// Создаем объект PemReader, используя содержимое файла PEM
var pemReader = new PemReader(new StringReader(certPem));
// Читаем объект X509Certificate из PemReader
var certObject = pemReader.ReadObject();
// Преобразуем объект X509Certificate в объект X509Certificate2
var cert = new X509Certificate2(DotNetUtilities.ToX509Certificate(certObject as Org.BouncyCastle.X509.X509Certificate));
// Возвращаем объект X509Certificate2
return cert;
}
public static AsymmetricAlgorithm LoadKeyFromPemFile(string keyPemFile)
{
// Читаем содержимое файла PEM
var keyPem = File.ReadAllText(keyPemFile);
// Создаем объект PemReader, используя содержимое файла PEM
var pemReader = new PemReader(new StringReader(keyPem));
// Читаем объект AsymmetricKeyParameter из PemReader
var keyObject = pemReader.ReadObject();
// Преобразуем объект AsymmetricKeyParameter в объект AsymmetricAlgorithm
var key = DotNetUtilities.ToRSA(keyObject as RsaPrivateCrtKeyParameters);
// Возвращаем объект AsymmetricAlgorithm
return key;
}