【转载】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);
    }
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值