以下算法单线程执行需要0.2秒的执行时间,远远不能达到并发处理的要求。。
求解决方案。
public string RSAEncrypt(string m_strEncryptString)
{
try
{
byte[] PlainTextBArray;
byte[] CypherTextBArray;
string Result;
System.Security.Cryptography.RSACryptoServiceProvider rsa=new RSACryptoServiceProvider();
rsa.FromXmlString(xmlPublicKey);
PlainTextBArray = (new UnicodeEncoding()).GetBytes(m_strEncryptString);
CypherTextBArray = rsa.Encrypt(PlainTextBArray, false);
Result=Convert.ToBase64String(CypherTextBArray);
return Result;
}
catch(Exception ex)
{
throw ex;
}
}
求解决方案。
public string RSAEncrypt(string m_strEncryptString)
{
try
{
byte[] PlainTextBArray;
byte[] CypherTextBArray;
string Result;
System.Security.Cryptography.RSACryptoServiceProvider rsa=new RSACryptoServiceProvider();
rsa.FromXmlString(xmlPublicKey);
PlainTextBArray = (new UnicodeEncoding()).GetBytes(m_strEncryptString);
CypherTextBArray = rsa.Encrypt(PlainTextBArray, false);
Result=Convert.ToBase64String(CypherTextBArray);
return Result;
}
catch(Exception ex)
{
throw ex;
}
}
public class Crypter
{
private RSACryptoServiceProvider provider;
private RSACryptoServiceProvider CryptoProvider
{
get
{
if (this.provider == null)
{
this.provider = new RSACryptoServiceProvider();
}
return this.provider;
}
}
public string RSAEncrypt(string text)
{
// Definition of xmlPublicKey?
this.CryptoProvider.FromXmlString(xmlPublicKey);
byte[] bytes = System.Text.Encoding.Unicode.GetBytes(text);
byte[] encryptedBytes = this.CryptoProvider。Encrypt(bytes, false);
string encryptedString = Convert.ToBase64String(encryptedBytes);
return encryptedString;
}
}
using System.Security.Cryptography;namespace ConsoleApplication1
{
/// <summary>
/// Class1 的摘要说明。
/// </summary>
class Class1
{
/// <summary>
/// 应用程序的主入口点。
/// </summary>
[STAThread]
static void Main(string[] args)
{
RSACryptoServiceProvider provider = new RSACryptoServiceProvider(1024);
string xmlPublicKey = provider.ToXmlString(false);
RSACrypter crypter = new RSACrypter(xmlPublicKey); Console.WriteLine(DateTime.Now.ToString("hh:MM:ss.ff"));
Console.WriteLine(crypter.RSAEncrypt("Hello, World!"));
Console.WriteLine(DateTime.Now.ToString("hh:MM:ss.ff")); Console.WriteLine(); Console.WriteLine(DateTime.Now.ToString("hh:MM:ss.ff"));
Console.WriteLine(crypter.RSAEncrypt("CSDN Community"));
Console.WriteLine(DateTime.Now.ToString("hh:MM:ss.ff")); Console.WriteLine(); Console.WriteLine(DateTime.Now.ToString("hh:MM:ss.ff"));
Console.WriteLine(crypter.RSAEncrypt("Visual Studio"));
Console.WriteLine(DateTime.Now.ToString("hh:MM:ss.ff"));
}
} public class RSACrypter
{
private string xmlPublicKey;
private RSACryptoServiceProvider provider; private RSACryptoServiceProvider CryptoProvider
{
get
{
if (this.provider == null)
{
this.provider = new RSACryptoServiceProvider();
this.provider.FromXmlString(this.xmlPublicKey);
}
return this.provider;
}
} public RSACrypter(string xmlPublicKey)
{
this.xmlPublicKey = xmlPublicKey;
} public string RSAEncrypt(string text)
{
byte[] bytes = System.Text.Encoding.Unicode.GetBytes(text);
byte[] encryptedBytes = this.CryptoProvider.Encrypt(bytes, false);
return Convert.ToBase64String(encryptedBytes);
}
}
}测试结果:05:04:30.00
JvP/uFm5wMDNECqTOnEiyn3U6pbD50ZyHDlVOSXXGARsVFEbHJcA9q0zffjCVH2pG/V52yf820k74Due
a9DFspvFKrIv2nPsjQciNYvPgUwFqGni40K3MbAhIrcYgX4XUP4P1jvTi6T9q/LIjE0xqrJfFKs6ir5g
qrUKRET9Cfo=
05:04:30.1005:04:30.10
hop/6z6aXttsp+lLJ5LkNL4Dj17mDI0podK9oOsr2ys0zWehsqxMqmqngNOguYEY6I4eZeQhFdbpMmN7
5stELAmo+KzdceoxqhbJGhfBitUIjxHBO2SOoQrbYOGpdyKWsnxYjwIk2m3sUWLBw22R9MsupMpGrL4N
Xpxn0d7p64U=
05:04:30.1005:04:30.10
WXFbEbUr42F9oXsXiDC9tAsCFMX+ODGHlTFgw1RhFDuW9UHUltoGvYXoIMQEvl8nJLv5N2tDXp+UO6Mt
PX2O1NZIth5dm/fxVSyy/wfQJgRUyxFEpwa+eoMBly45NlhYZMMqO3qWLn+Z1elSPX5UerzMRnGlzD/z
33uNMUihOkI=
05:04:30.10由于 Console.WriteLine 和 DateTime.ToString 会对测试结果有所影响,而且 DateTime 的
精度为 0.18ms,所以其实际效果会更理想(第一次调用为 0.1s 以内,以后调用远小于 0.1s)。
System.Security.Cryptography.RSACryptoServiceProvider rsa
这个对象放在cache中,提高了相当的性能。。