C# RSA客户端服务器加密解密
下面是一个简单的RSA加密/解密代码 如何使其适用于不同的应用程序?在下面的示例中,相同的C# RSA客户端服务器加密解密,c#,rsa,C#,Rsa,下面是一个简单的RSA加密/解密代码 如何使其适用于不同的应用程序?在下面的示例中,相同的RSA对象用于加密和解密。如何使其适用于两个独立的应用程序。因此,在一个应用程序中加密的数据由另一个应用程序解密 using System; using System.Security.Cryptography; using System.Text; class RSACSPSample { static void Main() { try {
RSA
对象用于加密和解密。如何使其适用于两个独立的应用程序。因此,在一个应用程序中加密的数据由另一个应用程序解密
using System;
using System.Security.Cryptography;
using System.Text;
class RSACSPSample
{
static void Main()
{
try
{
//Create a UnicodeEncoder to convert between byte array and string.
UnicodeEncoding ByteConverter = new UnicodeEncoding();
//Create byte arrays to hold original, encrypted, and decrypted data.
byte[] dataToEncrypt = ByteConverter.GetBytes("Data to Encrypt");
byte[] encryptedData;
byte[] decryptedData;
//Create a new instance of RSACryptoServiceProvider to generate
//public and private key data.
using (RSACryptoServiceProvider RSA = new RSACryptoServiceProvider())
{
//Pass the data to ENCRYPT, the public key information
//(using RSACryptoServiceProvider.ExportParameters(false),
//and a boolean flag specifying no OAEP padding.
encryptedData = RSAEncrypt(dataToEncrypt, RSA.ExportParameters(false), false);
//Pass the data to DECRYPT, the private key information
//(using RSACryptoServiceProvider.ExportParameters(true),
//and a boolean flag specifying no OAEP padding.
decryptedData = RSADecrypt(encryptedData, RSA.ExportParameters(true), false);
//Display the decrypted plaintext to the console.
Console.WriteLine("Decrypted plaintext: {0}", ByteConverter.GetString(decryptedData));
}
}
catch (ArgumentNullException)
{
//Catch this exception in case the encryption did
//not succeed.
Console.WriteLine("Encryption failed.");
}
}
static public byte[] RSAEncrypt(byte[] DataToEncrypt, RSAParameters RSAKeyInfo, bool DoOAEPPadding)
{
try
{
byte[] encryptedData;
//Create a new instance of RSACryptoServiceProvider.
using (RSACryptoServiceProvider RSA = new RSACryptoServiceProvider())
{
//Import the RSA Key information. This only needs
//toinclude the public key information.
RSA.ImportParameters(RSAKeyInfo);
//Encrypt the passed byte array and specify OAEP padding.
//OAEP padding is only available on Microsoft Windows XP or
//later.
encryptedData = RSA.Encrypt(DataToEncrypt, DoOAEPPadding);
}
return encryptedData;
}
//Catch and display a CryptographicException
//to the console.
catch (CryptographicException e)
{
Console.WriteLine(e.Message);
return null;
}
}
static public byte[] RSADecrypt(byte[] DataToDecrypt, RSAParameters RSAKeyInfo, bool DoOAEPPadding)
{
try
{
byte[] decryptedData;
//Create a new instance of RSACryptoServiceProvider.
using (RSACryptoServiceProvider RSA = new RSACryptoServiceProvider())
{
//Import the RSA Key information. This needs
//to include the private key information.
RSA.ImportParameters(RSAKeyInfo);
//Decrypt the passed byte array and specify OAEP padding.
//OAEP padding is only available on Microsoft Windows XP or
//later.
decryptedData = RSA.Decrypt(DataToDecrypt, DoOAEPPadding);
}
return decryptedData;
}
//Catch and display a CryptographicException
//to the console.
catch (CryptographicException e)
{
Console.WriteLine(e.ToString());
return null;
}
}
}
当你打电话的时候
//Create a new instance of RSACryptoServiceProvider to generate
//public and private key data.
using (RSACryptoServiceProvider RSA = new RSACryptoServiceProvider())
....
新的RSA密钥对是按照您在代码上面的注释中所述生成的。您需要共享此密钥对。你可以
RSA.ExportParameters(true)
或
然后,您可以在两个应用程序的配置中都包含此输出,并且在执行开始时必须调用RSA.ImportParameters或RSA.FromXmlString
注意,上面的代码提取密钥对的私有部分。如果您只想在应用程序A中加密,而只想在应用程序B中解密,那么应用程序A只需要密钥对的公共部分,而应用程序B需要私有部分
也注意到,不推荐用非对称密码加密大数据(出于性能原因),你应该考虑使用对称密码术(即AES256)。
//Create a new instance of RSACryptoServiceProvider to generate
//public and private key data.
using (RSACryptoServiceProvider RSA = new RSACryptoServiceProvider())
....
新的RSA密钥对是按照您在代码上面的注释中所述生成的。您需要共享此密钥对。你可以
RSA.ExportParameters(true)
或
然后,您可以在两个应用程序的配置中都包含此输出,并且在执行开始时必须调用RSA.ImportParameters或RSA.FromXmlString
注意,上面的代码提取密钥对的私有部分。如果您只想在应用程序A中加密,而只想在应用程序B中解密,那么应用程序A只需要密钥对的公共部分,而应用程序B需要私有部分
也注意到,不推荐用非对称密码加密大数据(因为性能原因),你应该考虑使用对称密码术(即AES256)。< /P>为RSA相关代码创建DLL,并在两个应用程序中使用它;“和一个不指定OAEP填充的布尔标志”——OAEP是安全的。v1.5很弱,除非您非常小心,否则它可能允许攻击者将您的服务器用作oracle来解密消息。我强烈建议使用OAEP。为RSA相关代码创建一个DLL,并在两个应用程序中使用它?“和一个指定无OAEP填充的布尔标志”-OAEP是安全的。v1.5很弱,除非您非常小心,否则它可能允许攻击者将您的服务器用作oracle来解密消息。我强烈建议使用OAEP。现在我明白了,实际上我没有正确解释这个问题。我想要交换钥匙。现在我得到了,实际上我没有正确地解释这个问题。我想要交换钥匙。