简体   繁体   中英

Decrypt message with private key RSA

I have a problem how i can find the private key from windows 2008 server.

first i encrypt a data with public key that i extracted it from url HTTPS like this:

 public static string Encrypt(string Data)
    {
        try
        {
            var Crypto = new RSACryptoServiceProvider(2048);
            var RsaKeyInfo = Crypto.ExportParameters(false);
            RsaKeyInfo.Modulus = PublicKeyByte();
            Crypto.ImportParameters(RsaKeyInfo);

            var bytesData = Encoding.Unicode.GetBytes(Data);
            var bytesCypherText = Crypto.Encrypt(bytesData, false);
            var cypherText = Convert.ToBase64String(bytesCypherText);

            return cypherText;
        }
        catch (Exception ex)
        {

            return null;
        }
    }
    private static byte[] PublicKeyByte()
    {
        Uri u = new Uri("https:\\domain.com");
        ServicePoint sp = ServicePointManager.FindServicePoint(u);

        string groupName = Guid.NewGuid().ToString();
        HttpWebRequest req = HttpWebRequest.Create(u) as HttpWebRequest;
        req.ConnectionGroupName = groupName;

        using (WebResponse resp = req.GetResponse())
        {

        }
        sp.CloseConnectionGroup(groupName);
        return sp.Certificate.GetPublicKey(); ;
    }

Now i dont know how extract private key in C# for decrypting message? and i want to know more informations about this

thanks,

i resolved this by extracting the certificate file .PFX and im using System.Security.Cryptography.X509Certificates for encrypting and decrypting:

public static string Encrypt(string data)
    {
        try
        {
            var path = @"certificate.pfx";
            var password = "test";
            var collection = new X509Certificate2Collection();
            collection.Import(path, password, X509KeyStorageFlags.PersistKeySet);
            var certificate = collection[0];
            var publicKey = certificate.PublicKey.Key as RSACryptoServiceProvider;
            var bytesData = Convert.FromBase64String(data);
            var encryptedData = publicKey.Encrypt(bytesData, false);
            var cypherText = Convert.ToBase64String(encryptedData);

            return cypherText;
        }
        catch (Exception ex)
        {

            return null;
        }
    }
    public static string Decrypt(string data)
    {
        try
        {
            var path = @"certificate.pfx";
            var password = "test";
            var collection = new X509Certificate2Collection();
            collection.Import(path, password, X509KeyStorageFlags.PersistKeySet);
            var certificate = collection[0];

            var privateKey = certificate.PrivateKey as RSACryptoServiceProvider;
            var bytesData = Convert.FromBase64String(data);
            var dataByte = privateKey.Decrypt(bytesData, false);
            return Convert.ToBase64String(dataByte);
         }
        catch (Exception ex)
        {
            return "";
        }
    }

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM