【转载】RSA加密解密

using System;
using System.Security.Cryptography;
using System.Text;

/// <summary>
/// RSA加密解密
/// </summary>
public static class RSAEncrypt
{
    /// <summary>
    /// generate private key and public key arr[0] for private key arr[1] for public key
    /// 生成密匙,arr[0]私匙,arr[1]公匙
    /// </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;
    }

    /// <summary>
    /// RSA 加密
    /// </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();
    }

    /// <summary>
    /// RSA 解密
    /// </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] != string.Empty)
            {
                byteEn[j] = Byte.Parse(sBytes[j]);
            }
        }
        byte[] plaintbytes = rsa.Decrypt(byteEn, false);
        return Encoding.UTF8.GetString(plaintbytes);
    }
}

 

posted @ 2017-04-15 16:41  事理  阅读(241)  评论(0编辑  收藏  举报