RSA两个系统之间使用私钥解密

本文关键字:之间 私钥 解密 系统 两个 RSA | 更新日期: 2023-09-27 18:14:08

我正在开发一个加密解密软件。我使用RSA加密来加密我的对称密钥。

我遵循演练:创建加密应用程序

中提供的代码

我的加密和解密在同一台机器上成功完成。但是当我试图从其他电脑上解密时,出现了一个错误:出现了坏数据。(可以在同一台机器上解密)

我认为问题是在从keycontainer获得私钥。如何在第二台机器上获得第一台机器生成的私钥。

我搜索了很多,但都在同一台机器上。

请帮帮我,给我一个在其他机器上获得私钥的想法。

public void GetPrivateKey()
    {
        string c;
        cspp.KeyContainerName = keyName;
        rsa = new RSACryptoServiceProvider(cspp);
        rsa.PersistKeyInCsp = true;
        if (rsa.PublicOnly == true)
            c= "Key: " + cspp.KeyContainerName + " - Public Only";
        else
            c = "Key: " + cspp.KeyContainerName + " - Full Key Pair";
    }    

 public string decryptkey(string at)
    {
        byte[] KeyEncrypted;
        KeyEncrypted = File.ReadAllBytes(at);
        //System.IO.File.ReadAllBytes(at);//for good 
        objr.GetPrivateKey();
       byte[] KeyDecrypted = objr.rsa.Decrypt(KeyEncrypted, false);
        string skey = GetString(KeyDecrypted);
        return skey;
    }

这一行发生坏数据错误,

byte[] KeyDecrypted = objr.rsa.Decrypt(KeyEncrypted, false); .

请. .

RSA两个系统之间使用私钥解密

使用RSACryptoServiceProvider。ToXmlString方法导出私钥。导出私钥需要将true传递给该方法。这将为您生成一个包含关键参数(包括私有参数)的XML文档。

在第二台机器上,使用RSACryptoServiceProvider。FromXmlString将私钥导入RSACryptoServiceProvider实例。

但是,出于安全原因,我建议不要这样做,而是在一台机器上生成私钥(将执行解密部分的机器),然后使用RSACryptoServiceProvider。并将false传递给它以仅导出公钥。在另一台机器上(它将执行加密部分),使用RSACryptoServiceProvider导入公钥。FromXmlString方法。

仅使用公钥,您就可以完成过程的加密部分。

只有在解密时才需要私钥。

下面是一些示例代码:
//Do this on one machine
RSACryptoServiceProvider rsa_machine1 = new RSACryptoServiceProvider(); //You might initialize this in a different way
var xml = rsa_machine1.ToXmlString(true); //or pass false to just export the public key

现在将xml变量的值带到另一台机器上(可能通过将其保存到一个文件,然后手动将该文件复制到第二台机器上)

//This is done on the second machine
RSACryptoServiceProvider rsa_machine2 = new RSACryptoServiceProvider();
rsa_machine2.FromXmlString(xml);