Bob和Alice非对称加解密实现
Bob and Alice asymmetric encryption and decryption implementation
我正在尝试使用 RSACryptoServiceProvider
构建 Bob 和 Alice 非对称加密和解密实现
为此我有
- 控制台应用程序 Bob(可以视为发件人)
- 控制台应用Alice(可以考虑作为接收者)
控制台应用 Bob 可以使用它的 public 密钥加密,然后控制台应用 Alice 可以使用它的私钥解密它
所以这是 Bob 控制台应用程序
class Program
{
static void Main(string[] args)
{
RSACryptoServiceProvider rsa = new RSACryptoServiceProvider();
string publicKey = rsa.ToXmlString(false);
string privateKey = rsa.ToXmlString(true);
EncryptText(publicKey, "Hello from C# Corner", "encryptedData.dat");
}
public static void EncryptText(string publicKey, string text, string fileName)
{
UnicodeEncoding byteConverter = new UnicodeEncoding();
byte[] dataToEncrypt = byteConverter.GetBytes(text);
byte[] encryptedData;
using (RSACryptoServiceProvider rsa = new RSACryptoServiceProvider())
{
rsa.FromXmlString(publicKey);
encryptedData = rsa.Encrypt(dataToEncrypt, false);
}
File.WriteAllBytes(fileName, encryptedData);
Console.WriteLine("Data has been encrypted");
}
}
这是 Alice 控制台应用程序
class Program
{
static void Main(string[] args)
{
RSACryptoServiceProvider rsa = new RSACryptoServiceProvider();
string publicKey = rsa.ToXmlString(false);
string privateKey = rsa.ToXmlString(true);
Console.WriteLine("Decrypted message: {0}", DecryptData(privateKey, "encryptedData.dat"));
}
public static string DecryptData(string privateKey, string fileName)
{
byte[] dataToDecrypt = File.ReadAllBytes(fileName);
byte[] decryptedData;
using (RSACryptoServiceProvider rsa = new RSACryptoServiceProvider())
{
rsa.FromXmlString(privateKey);
decryptedData = rsa.Decrypt(dataToDecrypt, false);
}
UnicodeEncoding byteConverter = new UnicodeEncoding();
return byteConverter.GetString(decryptedData);
}
}
解密时出现错误
System.Security.Cryptography.CryptographicException: 'The parameter is
incorrect.
能否请您就此提出建议:)
这里的原因是您要在两个应用程序中构建 public/private 密钥对 。
本质上,您是在尝试使用 Bob 的 public 密钥加密某些内容,并尝试使用 Alice 的私钥对其进行解密。这行不通。
您需要构造 1 对,然后使用该对中的 public 密钥进行加密,私钥 来自同一对用于解密。
这个有效:
void Main()
{
RSACryptoServiceProvider rsa = new RSACryptoServiceProvider();
string publicKey = rsa.ToXmlString(false);
string privateKey = rsa.ToXmlString(true);
EncryptText(publicKey, "Test", @"d:\temp\test.dat");
Console.WriteLine(DecryptData(privateKey, @"d:\temp\test.dat"));
}
但是如果我在调用 decrypt 之前创建一个新的对,我会得到这个错误:
WindowsCryptographicException
The parameter is incorrect.
我正在尝试使用 RSACryptoServiceProvider
构建 Bob 和 Alice 非对称加密和解密实现为此我有
- 控制台应用程序 Bob(可以视为发件人)
- 控制台应用Alice(可以考虑作为接收者)
控制台应用 Bob 可以使用它的 public 密钥加密,然后控制台应用 Alice 可以使用它的私钥解密它
所以这是 Bob 控制台应用程序
class Program
{
static void Main(string[] args)
{
RSACryptoServiceProvider rsa = new RSACryptoServiceProvider();
string publicKey = rsa.ToXmlString(false);
string privateKey = rsa.ToXmlString(true);
EncryptText(publicKey, "Hello from C# Corner", "encryptedData.dat");
}
public static void EncryptText(string publicKey, string text, string fileName)
{
UnicodeEncoding byteConverter = new UnicodeEncoding();
byte[] dataToEncrypt = byteConverter.GetBytes(text);
byte[] encryptedData;
using (RSACryptoServiceProvider rsa = new RSACryptoServiceProvider())
{
rsa.FromXmlString(publicKey);
encryptedData = rsa.Encrypt(dataToEncrypt, false);
}
File.WriteAllBytes(fileName, encryptedData);
Console.WriteLine("Data has been encrypted");
}
}
这是 Alice 控制台应用程序
class Program
{
static void Main(string[] args)
{
RSACryptoServiceProvider rsa = new RSACryptoServiceProvider();
string publicKey = rsa.ToXmlString(false);
string privateKey = rsa.ToXmlString(true);
Console.WriteLine("Decrypted message: {0}", DecryptData(privateKey, "encryptedData.dat"));
}
public static string DecryptData(string privateKey, string fileName)
{
byte[] dataToDecrypt = File.ReadAllBytes(fileName);
byte[] decryptedData;
using (RSACryptoServiceProvider rsa = new RSACryptoServiceProvider())
{
rsa.FromXmlString(privateKey);
decryptedData = rsa.Decrypt(dataToDecrypt, false);
}
UnicodeEncoding byteConverter = new UnicodeEncoding();
return byteConverter.GetString(decryptedData);
}
}
解密时出现错误
System.Security.Cryptography.CryptographicException: 'The parameter is incorrect.
能否请您就此提出建议:)
这里的原因是您要在两个应用程序中构建 public/private 密钥对 。
本质上,您是在尝试使用 Bob 的 public 密钥加密某些内容,并尝试使用 Alice 的私钥对其进行解密。这行不通。
您需要构造 1 对,然后使用该对中的 public 密钥进行加密,私钥 来自同一对用于解密。
这个有效:
void Main()
{
RSACryptoServiceProvider rsa = new RSACryptoServiceProvider();
string publicKey = rsa.ToXmlString(false);
string privateKey = rsa.ToXmlString(true);
EncryptText(publicKey, "Test", @"d:\temp\test.dat");
Console.WriteLine(DecryptData(privateKey, @"d:\temp\test.dat"));
}
但是如果我在调用 decrypt 之前创建一个新的对,我会得到这个错误:
WindowsCryptographicException
The parameter is incorrect.