Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ember.js/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# RSA客户端服务器加密解密_C#_Rsa - Fatal编程技术网

C# 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加密/解密代码

如何使其适用于不同的应用程序?在下面的示例中,相同的
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。现在我明白了,实际上我没有正确解释这个问题。我想要交换钥匙。现在我得到了,实际上我没有正确地解释这个问题。我想要交换钥匙。