c# – 使用现有密钥使用OpenSSL.NET解密RSA

我在下面的代码中使用OpenSSL.Net生成OpenSSL RSA公钥和私钥.但是,我似乎找不到使用给定私钥解密数据的方法.我知道如果我调用生成密钥然后相应的方法加密和解密数据它工作正常.但是,如果我尝试从给定公钥的外部源解密某些内容,我该如何使用该密钥进行解密.

注意:请不要给出不使用OpenSSL.NET的示例. Microsoft加密提供程序比OpenSSL慢得多,并且不符合我的速度要求.

谢谢!

public class AsymmetricKeyResult
{
    public string PublicKey { get; set; }
    public string PrivateKey { get; set; }

    public AsymmetricKeyResult(string publicKey, string privateKey)
    {
        this.PublicKey = publicKey;
        this.PrivateKey = privateKey;
    }
}

public static AsymmetricKeyResult GenerateAsymmetricKeys(int keyLength)
{
    RSA rsa = new RSA();
    rsa.GenerateKeys(keyLength, 0x10021, null, null);
    AsymmetricKeyResult kResult = new AsymmetricKeyResult(rsa.PublicKeyAsPEM, rsa.PrivateKeyAsPEM);

    return kResult;
}
最佳答案
我最终通过Managed Wrapper for OpenSSL.NET上的对象浏览器搞清楚了.这有效:

    public static byte[] AsymmetricEncrypt(string publicKeyAsPem, byte[] payload)
    {
        CryptoKey d = CryptoKey.FromPublicKey(publicKeyAsPem, null);
        RSA rsa = d.GetRSA();
        byte[] result = rsa.PublicEncrypt(payload, RSA.Padding.PKCS1);
        rsa.Dispose();
        return result;
    }

    public static byte[] AsymmetricDecrypt(string privateKeyAsPem, byte[] payload)
    {
        CryptoKey d = CryptoKey.FromPrivateKey(privateKeyAsPem, null);
        RSA rsa = d.GetRSA();
        byte[] result = rsa.PrivateDecrypt(payload, RSA.Padding.PKCS1);
        rsa.Dispose();
        return result;
    }

转载注明原文:c# – 使用现有密钥使用OpenSSL.NET解密RSA - 代码日志