在C#中使用公钥作为文本加密字符串

问题描述

我收到了一个 txt 格式的公钥。 (开始证书---结束证书) 我想在 C# 中使用此密钥加密我的消息并将其发送。

同样,我有文本格式的私钥。我已经与第三方共享了我的公钥,他们用它来加密消息。我想使用我的私钥以 TEXT 格式解密消息。 我如何在 C# 中做到这一点?

请帮忙。

解决方法

public class MyCrypto
{
    public X509Certificate2 GetDecryptionCertificate(string certificateName)
    {
        var my = new X509Store(StoreName.My,StoreLocation.LocalMachine);
        my.Open(OpenFlags.ReadOnly);
        var collection = my.Certificates.Find(X509FindType.FindBySubjectName,certificateName,false);
        if (collection.Count == 1)
        {
            return collection[0];
        }
        else if (collection.Count > 1)
        {
            throw new Exception(string.Format("More than one certificate with name '{0}' found in store LocalMachine/My.",certificateName));
        }
        else
        {
            throw new Exception(string.Format("Certificate '{0}' not found in store LocalMachine/My.",certificateName));
        }
    }

    public X509Certificate2 GetEncryptionCertificate(string filePath)
    {
        var collection = new X509Certificate2Collection();
        collection.Import(filePath);
        return collection[0];

    }

    public string EncryptRsa(string input,X509Certificate2 x509Certificate2)
    {
        var output = string.Empty;

        using (RSA csp = (RSA)x509Certificate2.PublicKey.Key)
        {
            byte[] bytesData = Encoding.UTF8.GetBytes(input);
            byte[] bytesEncrypted = csp.Encrypt(bytesData,RSAEncryptionPadding.OaepSHA1);
            output = Convert.ToBase64String(bytesEncrypted);
        }
        return output;
    }

    public string DecryptRsa(string encrypted,X509Certificate2 x509Certificate2)
    {
        var text = string.Empty;

        using (RSA csp = (RSA)x509Certificate2.PrivateKey)
        {
            byte[] bytesEncrypted = Convert.FromBase64String(encrypted);
            byte[] bytesDecrypted = csp.Decrypt(bytesEncrypted,RSAEncryptionPadding.OaepSHA1);
            text = Encoding.UTF8.GetString(bytesDecrypted);
        }
        return text;
    }

 
}