using System;
namespace Shared.Encryption
{
public class RSA
{
///
/// 用指定的密匙加密
///
/// 明文
/// 可以是RSACryptoServiceProvider生成的E
/// 可以是RSACryptoServiceProvider生成的Modulus
/// 返回密文
public static string EncryptString(string source, BigInteger e, BigInteger n)
{
int len = source.Length;
int len1 = 0;
int blockLen = 0;
if ((len % 128) == 0)
len1 = len / 128;
else
len1 = len / 128 + 1;
string block = "";
var result = new System.Text.StringBuilder();
for (int i = 0; i < len1; i++)
{
if (len >= 128)
blockLen = 128;
else
blockLen = len;
block = source.Substring(i * 128, blockLen);
byte[] oText = System.Text.Encoding.UTF8.GetBytes(block);
var biText = new BigInteger(oText);
var biEnText = biText.modPow(e, n);
var temp = biEnText.ToHexString();
result.Append(temp).Append("@");
len -= blockLen;
}
return result.ToString().TrimEnd('@');
}
}
}