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('@'); 
 | 
        } 
 | 
  
 | 
    } 
 | 
} 
 |