`
chriszeng87
  • 浏览: 738435 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

C#实现RSA加密和解密详解

阅读更多

RSA加密解密源码:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Security.Cryptography;

namespace MyRSA
{

public class MyRSA

{

private static string publicKey = 

"<RSAKeyValue><Modulus>6CdsXgYOyya/yQH" +

"TO96dB3gEurM2UQDDVGrZoe6RcAVTxAqDDf5L" + 

"wPycZwtNOx3Cfy44/D5Mj86koPew5soFIz9sx" +

"PAHRF5hcqJoG+q+UfUYTHYCsMH2cnqGVtnQiE" +

"/PMRMmY0RwEfMIo+TDpq3QyO03MaEsDGf13sP" +

"w9YRXiac=</Modulus><Exponent>AQAB</Exponent></RSAKeyValue>";

private static string privateKey = 

"<RSAKeyValue><Modulus>6CdsXgYOyya/yQH" +

"TO96dB3gEurM2UQDDVGrZoe6RcAVTxAqDDf5L" +

"wPycZwtNOx3Cfy44/D5Mj86koPew5soFIz9sx" +

"PAHRF5hcqJoG+q+UfUYTHYCsMH2cnqGVtnQiE" +

"/PMRMmY0RwEfMIo+TDpq3QyO03MaEsDGf13sP" +

"w9YRXiac=</Modulus><Exponent>AQAB</Exponent>" +

"<P>/aoce2r6tonjzt1IQI6FM4ysR40j/gKvt4d" +

"L411pUop1Zg61KvCm990M4uN6K8R/DUvAQdrRd" +

"VgzvvAxXD7ESw==</P><Q>6kqclrEunX/fmOle" +

"VTxG4oEpXY4IJumXkLpylNR3vhlXf6ZF9obEpG" +

"lq0N7sX2HBxa7T2a0WznOAb0si8FuelQ==</Q>" +

"<DP>3XEvxB40GD5v/Rr4BENmzQW1MBFqpki6FU" +

"GrYiUd2My+iAW26nGDkUYMBdYHxUWYlIbYo6Te" +

"zc3d/oW40YqJ2Q==</DP><DQ>LK0XmQCmY/ArY" +

"gw2Kci5t51rluRrl4f5l+aFzO2K+9v3PGcndjA" +

"StUtIzBWGO1X3zktdKGgCLlIGDrLkMbM21Q==</DQ><InverseQ>" +

"GqC4Wwsk2fdvJ9dmgYlej8mTDBWg0Wm6aqb5kjn" +

"cWK6WUa6CfD+XxfewIIq26+4Etm2A8IAtRdwPl4" +

"aPjSfWdA==</InverseQ><D>a1qfsDMY8DSxB2D" +

"Cr7LX5rZHaZaqDXdO3GC01z8dHjI4dDVwOS5ZFZ" +

"s7MCN3yViPsoRLccnVWcLzOkSQF4lgKfTq3IH40" +

"H5N4gg41as9GbD0g9FC3n5IT4VlVxn9ZdW+WQry" +

"oHdbiIAiNpFKxL/DIEERur4sE1Jt9VdZsH24CJE=</D></RSAKeyValue>";

static public string Decrypt(string base64code)

{

try

{

//Create a UnicodeEncoder to convert between byte array and string.

        UnicodeEncoding ByteConverter = new UnicodeEncoding();

//Create a new instance of RSACryptoServiceProvider to generate

//public and private key data.

        RSACryptoServiceProvider RSA = new RSACryptoServiceProvider();

        RSA.FromXmlString(privateKey);

byte[] encryptedData;

byte[] decryptedData;

        encryptedData = Convert.FromBase64String(base64code);

//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. 

        return ByteConverter.GetString(decryptedData);

    }

catch (Exception exc)

{

//Exceptions.LogException(exc);

        Console.WriteLine(exc.Message);

return "";

    }

}

static public string Encrypt(string toEncryptString)

{

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(toEncryptString);

byte[] encryptedData;

byte[] decryptedData;

//Create a new instance of RSACryptoServiceProvider to generate

//public and private key data.

        RSACryptoServiceProvider RSA = new RSACryptoServiceProvider();

        RSA.FromXmlString(privateKey);

//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);

string base64code = Convert.ToBase64String(encryptedData);

return base64code;

    }

catch (Exception exc)

{

//Catch this exception in case the encryption did

//not succeed.

//Exceptions.LogException(exc);

        Console.WriteLine(exc.Message);

return "";

    }

}

static private byte[] RSAEncrypt(

byte[] DataToEncrypt, 

    RSAParameters RSAKeyInfo, 

bool DoOAEPPadding)

{

try

{

//Create a new instance of RSACryptoServiceProvider.

        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.  

        return RSA.Encrypt(DataToEncrypt, DoOAEPPadding);

    }

//Catch and display a CryptographicException  

//to the console.

    catch (CryptographicException e)

{

//Exceptions.LogException(e);

        Console.WriteLine(e.Message);

return null;

    }

}

static private byte[] RSADecrypt(

byte[] DataToDecrypt,

    RSAParameters RSAKeyInfo,

bool DoOAEPPadding)

{

try

{

//Create a new instance of RSACryptoServiceProvider.

        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.  

        return RSA.Decrypt(DataToDecrypt, DoOAEPPadding);

    }

//Catch and display a CryptographicException  

//to the console.

    catch (CryptographicException e)

{

//Exceptions.LogException(e);

        Console.WriteLine(e.Message);

return null;

    }

}

}

}


 测试代码:

        static void Main(string[] args)
        {
            string encodeString = MyRSA.Encrypt("1234567");
            Console.WriteLine(encodeString);


            string decode = MyRSA.Decrypt(encodeString);
            Console.WriteLine(decode);

            Console.ReadLine();
        }

 

 

转自:http://www.csharpwin.com/csharpspace/8761r456.shtml

分享到:
评论

相关推荐

    C# RSA加密解密

    **C# RSA加密解密详解** 在信息安全领域,加密技术是一种至关重要的手段,用于保护数据的隐私和安全性。RSA(Rivest-Shamir-Adleman)算法是一种非对称加密算法,广泛应用于网络通信、数据存储等领域。C#作为.NET...

    C# RSA分段加解密实现方法详解

    总结一下,C#中实现RSA分段加解密的关键在于理解RSA加密的限制,以及如何有效地处理超过单次加密限制的数据。通过循环分块处理,可以确保任何大小的数据都能被安全地加密和解密。在编写相关代码时,需要注意正确处理...

    C#中关于RSA加密算法(案例代码) c#经典案例.pdf

    C#中RSA加密算法详解 在C#程序中,RSA加密算法是一种广泛使用的公钥加密算法。 RSA加密算法于1977年由Ron Rivest、Adi Shamir和Len Adleman在美国麻省理工学院开发的。RSA取名来自开发他们三者的名字。RSA是目前最...

    同时兼容JS和C#的RSA加密解密算法详解(对web提交的数据加密传输)

    在JavaScript和C#之间实现RSA加密解密,需要解决两个主要问题:格式兼容性和前后端通信。 1. **格式兼容性**: 默认情况下,JavaScript和C#使用的RSA密钥格式不一致。C#中的RSA密钥通常存储为XML字符串或.NET的...

    C#中RSA加密与解密的实例详解

    1. RSA加密与解密 — 使用公钥加密、私钥解密 public class RSATool { public string Encrypt(string strText, string strPublicKey) { RSACryptoServiceProvider rsa = new RSACryptoServiceProvider(); ...

    C#实现数据包加密与解密实例详解

    C#中的加密解密是一个复杂而富有挑战的领域,开发者需要深入理解各种加密技术原理,并且能够合理选择和使用这些技术,以确保数据的安全性。随着计算机网络技术的不断发展,加密技术也在不断进步,因此开发者需要持续...

    加密聊天工具 AES RSA C#

    《基于AES和RSA的C#加密聊天工具详解》 在信息技术高速发展的今天,网络安全成为了一个至关重要的议题。本文将深入探讨一个局域网内的聊天工具,该工具在通信过程中采用了高级加密标准(AES)和公钥加密算法RSA,...

    c#编写的加密聊天程序

    《C#编写的加密聊天程序详解》 C#是一种由微软公司推出的面向对象的编程语言,广泛应用于桌面应用开发、游戏开发以及Web服务等领域。在本文中,我们将深入探讨一个基于C#的加密聊天程序,它采用客户端/服务器(C/S...

    基于.net的RSA私钥加密 公钥解密的源码

    此源码示例是关于如何在C#环境下利用.NET框架实现RSA私钥加密和公钥解密的过程。以下是对这个主题的详细阐述: 1. **RSA算法基础**: RSA是由Ron Rivest、Adi Shamir和Leonard Adleman三位科学家在1977年提出的一...

    开源加密库Bouncy Castle Crypto APIs (RSA加密)

    在本文中,我们将深入探讨RSA加密以及如何在Java和C#之间进行密钥转换,同时也会介绍Bouncy Castle Crypto APIs在这些操作中的作用。 **RSA加密原理** RSA是一种基于大整数因子分解困难性的公钥加密算法。由Ron ...

    RSA公私钥pkcs8转换为C#用的xml

    RSA是一种非对称加密算法,广泛应用于网络安全领域,如数据加密、数字签名等。...通过理解以上知识点,你可以顺利地将PKCS#8格式的RSA公私钥转换为C#可使用的XML格式,以便在.NET环境中进行加密和解密操作。

    aspRSA CSharpRSA

    本文将深入探讨如何在ASP.NET环境中,使用C#语言实现RSA加密和解密。 **1. RSA算法基础** RSA算法基于大数因子分解的难题,由Ron Rivest、Adi Shamir和Leonard Adleman在1977年提出。它使用一对密钥,公钥用于加密...

    DotnetCore.RSA

    DotnetCore.RSA 是一个基于 .NET Core 平台实现的 RSA 加密解密库。RSA(Rivest-Shamir-Adleman)是一种非对称加密算法,广泛应用于网络安全、数据保护等领域。在 .NET Core 中,我们可以利用内置的 System....

    RSA-encryption-between-CSharp-and-java.rar_between_rsa_rsa cshar

    2. C#中实现RSA加密解密的步骤和代码示例。 3. Java中对应的实现,可能包括使用Java Cryptography Extension(JCE)进行RSA操作。 4. 如何在C#和Java之间交换公钥和私钥,并确保它们的兼容性。 5. 实际的互通案例,...

    RSA-Encryption-Decryption-C-Sharp-master_rsa_Sharp_

    RSA加密解密C#实现详解 在信息安全领域,RSA(Rivest-Shamir-Adleman)是一种广泛使用的非对称加密算法,它基于大数因子分解的困难性。这个项目的标题“RSA-Encryption-Decryption-C-Sharp-master_rsa_Sharp_”表明...

Global site tag (gtag.js) - Google Analytics