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);
.
请. .
使用RSACryptoServiceProvider。ToXmlString方法导出私钥。导出私钥需要将true
传递给该方法。这将为您生成一个包含关键参数(包括私有参数)的XML文档。
但是,出于安全原因,我建议不要这样做,而是在一台机器上生成私钥(将执行解密部分的机器),然后使用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);