#c# #cryptography
#c# #криптография
Вопрос:
Я хотел бы написать небольшую программу, которая подписывает строку сертификатом личного пользователя Windows.
Я обнаружил, что это CAPICOM
было решением, но теперь это устаревшее и совместимое только с 32-битным решением.
В идеале я хотел бы что-то вроде:
digest = sign(string, 'myWindowsCertificate');
Ответ №1:
Вы могли бы просто использовать System.Security.Cryptography
.
Давайте представим, что вы хотите подписать с помощью WISeKey
ключа, присутствующего в вашем хранилище:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Security.Cryptography.X509Certificates;
using System.Security.Cryptography;
namespace ConsoleApp1
{
class Program
{
static void Main(string[] args)
{
X509Store store = new X509Store(StoreName.My, StoreLocation.CurrentUser);
store.Open(OpenFlags.ReadOnly);
foreach (var cert in store.Certificates)
{
string desc = cert.GetNameInfo(X509NameType.SimpleName, true);
if (desc.Contains("WISeKey"))
{
RSA pk = cert.GetRSAPrivateKey();
byte[] buffer = Encoding.Default.GetBytes("Hello World ... !");
byte[] signature = pk.SignData(buffer, HashAlgorithmName.SHA256, RSASignaturePadding.Pkcs1);
System.Console.WriteLine(BitConverter.ToString(signature));
break;
}
}
Console.ReadLine();
}
}
}