ozbrlv7y47c049t1nGwSOQ0RjTer7etvDQ6r8A8lx23kdBNEOqhIf2o5HgNZE1b4vQXTyfCStDYQYcEoNtxaACAcGt/ki6Ih+n4gahap1BuxyWDc6pm52Dhg+cYJ5F+cQXyXNw2fMtEb2Arnhi102E/9q95pe5KL5My6LMSOumc=AQAB6lx1kClp+ibu3yDVG146EIx7eed/nUYj7lqnbwA3byPwN85siG0AtR2YMI/opVaiFXsZISTYuQMt3hhGLNAOqQ==
skjI0SNB4FcS8bhp6NVKJOiD5r2Kl4dV9ay+PZCst+qKRfTc3LWPDUIBKClMvGSgS2J3HKEWxe2F7LqRZMp6jw==
d3bAGsdxlSlJdIXo+7VxhcQGoSJng8UgRb0CQmvq1gWMyvW3j2d5B9nZHVAOOFHL94UzTxjYPJ8pP2BCTU+VWQ==qxEzv5j5CO4D+3RcC1E9R5Tjm2+boDH3xTfvgttjH0YpT17Y3d5IWQxQV9zpCIv1UuA0MoBPfbOfobqS8Ado+Q==SAhWq4McMlTueEDLJ/IRz43Ke0gAoiy5mVnhaQpQLWdOeToKtDKND7GV6FwRJs4lWdb+GGKMmn83oandb1CcpQ==OKZIUSl+bpFZVzkF8lwEWy7xB53qG/NaoSKVhQYM69J1t+A0D1P3jdn1pzgsQ60tOpZ6Mx5AHTKirvtXFOuYhOFmcROzbSWjAR5LlGSdEhBsywQWYNlGvVrzmJbay7vVYdty/Ys8b3Ae4HgB4WNEsAjGkTBJc8YeWH07qPO9lBE=
```
#### 密文
iIxveBnmQgB6tQlm2zCSnygErRLpHs6YnS95m3NWsCIbQqgTBDu+6BZs781Cua2v7IeCevC1wkeyXNV20dilA7kYW/KZhbHsf5Mj7o8R9NPwz9lN5eszAjmyDzbhFEbbVW0q3yg51c5LEUA5SXwvrU7khKZhpTPEPfFZHqe4sX5bpPygcz4dihFF57OFnPGoYVIAF7e7M+FWNcBZgCtR9E2/o8vaOsFw9/vri6NVA6o7eogbSANaw9KyTDln7WM+JBvs5Dts7o3gO/Z9HuhvlfyFDEUglvWKHg2SoN5Tv5HYAFHUgjc+d1uRfsbdRUX1LOoWVIGmjzu//eZIj/GnwA==
#### 正文
1|V1.0|SZTSG001|014229|0251365,0125487|QvukJ8qSNwIyqzOXDOYkyGEceAsTcYDVj6hrAd9pwTekUrGCSzdyAB19sKvgOY2kMN0zfMve9lPe6MoN7ZabH/bzgqjxh8asE6wJT6RgktdSj4Co7ZuOXz4Pn487k3uejBWzLZ8t2+V+4oD1WEtxGLY7+vzDY1QEyr4XynLGgEA=
#### 密文
QvukJ8qSNwIyqzOXDOYkyGEceAsTcYDVj6hrAd9pwTekUrGCSzdyAB19sKvgOY2kMN0zfMve9lPe6MoN7ZabH/bzgqjxh8asE6wJT6RgktdSj4Co7ZuOXz4Pn487k3uejBWzLZ8t2+V+4oD1WEtxGLY7+vzDY1QEyr4XynLGgEA=
#### 正文
5ff1996909e128286ada5248561c0c01|20170428095011|123
## .Net中算法
在.Net Framework中与RSA加密算法相关的类主要有两个:RSA 类和RSACryptoServiceProvider 类。按照MSDN的说法RSA 类是“表示 RSA 算法的所有实现均从中继承的基类”,而RSACryptoServiceProvider 类是“使用加密服务提供程序 (CSP) 提供的 RSA 算法的实现执行不对称加密和解密”。另外,“表示 RSA 算法的标准参数”的RSAParameters 结构也是很重要的,它保存了RSA算法的参数。
#### 加密
```
string RsaEncrypt(string content,string publicKey)
{
RSACryptoServiceProvider rsa = new RSACryptoServiceProvider();
byte[] cipherbytes;
rsa.FromXmlString(publicKey);
int MaxBlockSize = rsa.KeySize / 8 - 11;
byte[] contentBuff = Encoding.UTF8.GetBytes(content);
if (contentBuff.Length <= MaxBlockSize)
{
cipherbytes = rsa.Encrypt(contentBuff, false);
return Convert.ToBase64String(cipherbytes);
}
using (MemoryStream PlaiStream = new MemoryStream(contentBuff))
using (MemoryStream CrypStream = new MemoryStream())
{
Byte[] Buffer = new Byte[MaxBlockSize];
int BlockSize = PlaiStream.Read(Buffer, 0, MaxBlockSize);
while (BlockSize > 0)
{
Byte[] ToEncrypt = new Byte[BlockSize];
Array.Copy(Buffer, 0, ToEncrypt, 0, BlockSize);
Byte[] Cryptograph = rsa.Encrypt(ToEncrypt, false);
CrypStream.Write(Cryptograph, 0, Cryptograph.Length);
BlockSize = PlaiStream.Read(Buffer, 0, MaxBlockSize);
}
return Convert.ToBase64String(CrypStream.ToArray(), Base64FormattingOptions.None);
}
}
```
#### 解密
```
string RsaDecrypt(string content,string privateKey)
{
RSACryptoServiceProvider rsa = new RSACryptoServiceProvider();
byte[] cipherbytes;
rsa.FromXmlString(privateKey);
byte[] contentBuff = Convert.FromBase64String(content);
int MaxBlockSize = rsa.KeySize / 8;
if (contentBuff.Length <= MaxBlockSize + 1)
{
cipherbytes = rsa.Decrypt(contentBuff, false);
return Encoding.UTF8.GetString(cipherbytes);
}
using (MemoryStream CrypStream = new MemoryStream(contentBuff))
using (MemoryStream PlaiStream = new MemoryStream())
{
Byte[] Buffer = new Byte[MaxBlockSize];
int BlockSize = CrypStream.Read(Buffer, 0, MaxBlockSize);
while (BlockSize > 0)
{
Byte[] ToDecrypt = new Byte[BlockSize];
Array.Copy(Buffer, 0, ToDecrypt, 0, BlockSize);
Byte[] Plaintext = rsa.Decrypt(ToDecrypt, false);
PlaiStream.Write(Plaintext, 0, Plaintext.Length);
BlockSize = CrypStream.Read(Buffer, 0, MaxBlockSize);
}
return Encoding.UTF8.GetString(PlaiStream.ToArray());
}
}
```
#### 密匙生成
```
void GenerateKey()
{
Dictionary