using System;
|
namespace Shared.Encryption
|
{
|
public class RSA
|
{
|
/// <summary>
|
/// 用指定的密匙加密
|
/// </summary>
|
/// <param name="source">明文</param>
|
/// <param name="e">可以是RSACryptoServiceProvider生成的E</param>
|
/// <param name="n">可以是RSACryptoServiceProvider生成的Modulus</param>
|
/// <returns>返回密文</returns>
|
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('@');
|
}
|
|
}
|
}
|