标签:
1.生成一对keys:
/// <summary>
/// generate private key and public key arr[0] for private key arr[1] for public key
/// </summary>
/// <returns></returns>
public static string[] GenerateKeys()
{
string[] sKeys = new String[2];
RSACryptoServiceProvider rsa = new RSACryptoServiceProvider();
sKeys[0] = rsa.ToXmlString(true);
sKeys[1] = rsa.ToXmlString(false);
return sKeys;
}
2.加密:
/// <summary>
/// RSA Encrypt
/// </summary>
/// <param name="sSource" >Source string</param>
/// <param name="sPublicKey" >public key</param>
/// <returns></returns>
public static string EncryptString(string sSource, string sPublicKey)
{
RSACryptoServiceProvider rsa = new RSACryptoServiceProvider();
string plaintext = sSource;
rsa.FromXmlString(sPublicKey);
byte[] cipherbytes;
byte[] byteEn = rsa.Encrypt(Encoding.UTF8.GetBytes("a"), false);
cipherbytes = rsa.Encrypt(Encoding.UTF8.GetBytes(plaintext), false);
StringBuilder sbString = new StringBuilder();
for (int i = 0; i < cipherbytes.Length; i++)
{
sbString.Append(cipherbytes[i] + ",");
}
return sbString.ToString();
}
3. 解密:
/// <summary>
/// RSA Decrypt
/// </summary>
/// <param name="sSource">Source string</param>
/// <param name="sPrivateKey">Private Key</param>
/// <returns></returns>
public static string DecryptString(String sSource, string sPrivateKey)
{
RSACryptoServiceProvider rsa = new RSACryptoServiceProvider();
rsa.FromXmlString(sPrivateKey);
byte[] byteEn = rsa.Encrypt(Encoding.UTF8.GetBytes("a"), false);
string[] sBytes = sSource.Split(‘,‘);
for (int j = 0; j < sBytes.Length; j++)
{
if (sBytes[j] != "")
{
byteEn[j] = Byte.Parse(sBytes[j]);
}
}
byte[] plaintbytes = rsa.Decrypt(byteEn, false);
return Encoding.UTF8.GetString(plaintbytes);
}
RSA加密解密源码:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Security.Cryptography;
using System.Security;
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
{
UnicodeEncoding ByteConverter = new UnicodeEncoding();
RSACryptoServiceProvider RSA = new RSACryptoServiceProvider();
RSA.FromXmlString(privateKey);
byte[] encryptedData;
byte[] decryptedData;
encryptedData = Convert.FromBase64String(base64code);
decryptedData = RSADecrypt(encryptedData, RSA.ExportParameters(true), false);
return ByteConverter.GetString(decryptedData);
}
catch (Exception exc)
{
Console.WriteLine(exc.Message);
return "";
}
}
static public string Encrypt(string toEncryptString)
{
try
{
UnicodeEncoding ByteConverter = new UnicodeEncoding();
byte[] dataToEncrypt = ByteConverter.GetBytes(toEncryptString);
byte[] encryptedData;
RSACryptoServiceProvider RSA = new RSACryptoServiceProvider();
RSA.FromXmlString(privateKey);
encryptedData = RSAEncrypt(dataToEncrypt, RSA.ExportParameters(false), false);
string base64code = Convert.ToBase64String(encryptedData);
return base64code;
}
catch (Exception exc)
{
Console.WriteLine(exc.Message);
return "";
}
}
static private byte[] RSAEncrypt(byte[] DataToEncrypt, RSAParameters RSAKeyInfo, bool DoOAEPPadding)
{
try
{
RSACryptoServiceProvider RSA = new RSACryptoServiceProvider();
RSA.ImportParameters(RSAKeyInfo);
return RSA.Encrypt(DataToEncrypt, DoOAEPPadding);
}
catch (CryptographicException e)
{
Console.WriteLine(e.Message);
return null;
}
}
static private byte[] RSADecrypt(byte[] DataToDecrypt, RSAParameters RSAKeyInfo, bool DoOAEPPadding)
{
try
{
RSACryptoServiceProvider RSA = new RSACryptoServiceProvider();
RSA.ImportParameters(RSAKeyInfo);
return RSA.Decrypt(DataToDecrypt, DoOAEPPadding);
}
catch (CryptographicException e)
{
Console.WriteLine(e.Message);
return null;
}
}
}
}
转载自:http://www.cnblogs.com/amylis_chen/p/3641638.html
标签:
原文地址:http://www.cnblogs.com/guohu/p/5562840.html