在ASP.NET中使用RSA算法进行加密,解密的时候出错,请问是什么情况?代码和错误如下:
string seckey;
string pubkey;
RSACryptoServiceProvider rsa = new RSACryptoServiceProvider();
seckey = rsa.ToXmlString(true);
pubkey = rsa.ToXmlString(false); byte[] source = (new UnicodeEncoding()).GetBytes(txtInput.Text);
byte[] bytes_Cypher_Text = rsa.Encrypt(source, false);
string str_Cypher_Text = Convert.ToBase64String(bytes_Cypher_Text);
txtOutput1.Text = str_Cypher_Text; RSACryptoServiceProvider rsa1 = new RSACryptoServiceProvider();
rsa1.FromXmlString(pubkey); //byte[] DataToDecrypt = Convert.FromBase64String(txtOutput1.Text);
byte[] bytes_Plain_Text = rsa1.Decrypt(bytes_Cypher_Text, false);
UnicodeEncoding ByteConverter = new UnicodeEncoding();
txtOutput2.Text = ByteConverter.GetString(bytes_Plain_Text);
异常详细信息: System.Security.Cryptography.CryptographicException: 不正确的项。
源错误:
行 90:
行 91: //byte[] DataToDecrypt = Convert.FromBase64String(txtOutput1.Text);
行 92: byte[] bytes_Plain_Text = rsa1.Decrypt(bytes_Cypher_Text, false);
行 93: UnicodeEncoding ByteConverter = new UnicodeEncoding();
行 94: txtOutput2.Text = ByteConverter.GetString(bytes_Plain_Text);
string seckey;
string pubkey;
RSACryptoServiceProvider rsa = new RSACryptoServiceProvider();
seckey = rsa.ToXmlString(true);
pubkey = rsa.ToXmlString(false); byte[] source = (new UnicodeEncoding()).GetBytes(txtInput.Text);
byte[] bytes_Cypher_Text = rsa.Encrypt(source, false);
string str_Cypher_Text = Convert.ToBase64String(bytes_Cypher_Text);
txtOutput1.Text = str_Cypher_Text; RSACryptoServiceProvider rsa1 = new RSACryptoServiceProvider();
rsa1.FromXmlString(pubkey); //byte[] DataToDecrypt = Convert.FromBase64String(txtOutput1.Text);
byte[] bytes_Plain_Text = rsa1.Decrypt(bytes_Cypher_Text, false);
UnicodeEncoding ByteConverter = new UnicodeEncoding();
txtOutput2.Text = ByteConverter.GetString(bytes_Plain_Text);
异常详细信息: System.Security.Cryptography.CryptographicException: 不正确的项。
源错误:
行 90:
行 91: //byte[] DataToDecrypt = Convert.FromBase64String(txtOutput1.Text);
行 92: byte[] bytes_Plain_Text = rsa1.Decrypt(bytes_Cypher_Text, false);
行 93: UnicodeEncoding ByteConverter = new UnicodeEncoding();
行 94: txtOutput2.Text = ByteConverter.GetString(bytes_Plain_Text);
解决方案 »
- 数据库里count函数
- 在ASP中,Javascript如何获取数据库查询出来的数据啊??急~~~~
- 如何在前台(javascript)给popupwin的message属性赋值 ?
- 正则表达式求解
- 关闭MDI 窗体时,其子窗体closing事件为 e.Cancel = true; 应该如何关闭MDI窗体?
- 关于div/javascript/asp.net的问题~
- 如何给存储过程复空值
- 一个初级的数据库连接问题
- 为什么引用类会 “未将对象引用设置到对象的实例?”
- 关于reqeust.form.item("username")为什么取回的是空值
- 求一个鼠标闲置程序
- .net 服务器升级2.0问题!(有经验的来,谢谢)
using System; using System.IO; using System.Text; using System.Security.Cryptography; namespace RX.SynchHistoryData.Utility { /// <summary> /// 根据对称算法对数据进行加密和解密 /// </summary> public class CryptClass { private string txtKey = "lycompsofts="; private string txtIV = "lycompsofts="; private SymmetricAlgorithm mCSP; public CryptClass() { } private void keyIv() { mCSP = new DESCryptoServiceProvider(); mCSP.Key = Convert.FromBase64String(txtKey); mCSP.IV = Convert.FromBase64String(txtIV); } /// <summary> /// 加密 /// </summary> /// <param name="str">待加密数据 </param> /// <param name="sKey">密钥 </param> /// <param name="sIV">初始化向量 </param> /// <returns> </returns> public string EncryptString(string str, string sKey, string sIV) { txtKey = sKey; txtIV = sIV; keyIv(); ICryptoTransform ct; MemoryStream ms; CryptoStream cs; byte[] byt; ct = mCSP.CreateEncryptor(mCSP.Key, mCSP.IV); byt = Encoding.UTF8.GetBytes(str); ms = new MemoryStream(); cs = new CryptoStream(ms, ct, CryptoStreamMode.Write); cs.Write(byt, 0, byt.Length); cs.FlushFinalBlock(); cs.Close(); return Convert.ToBase64String(ms.ToArray()); } /// <summary> /// 解密 /// </summary> /// <param name="str">已加密数据 </param> /// <param name="sKey">密钥 </param> /// <param name="sIV">初始化向量 </param> /// <returns> </returns> public string DecryptString(string str, string sKey, string sIV) { txtKey = sKey; txtIV = sIV; keyIv(); ICryptoTransform ct; MemoryStream ms; CryptoStream cs; byte[] byt; ct = mCSP.CreateDecryptor(mCSP.Key, mCSP.IV); byt = Convert.FromBase64String(str); ms = new MemoryStream(); cs = new CryptoStream(ms, ct, CryptoStreamMode.Write); cs.Write(byt, 0, byt.Length); cs.FlushFinalBlock(); cs.Close(); return Encoding.UTF8.GetString(ms.ToArray()); } } }
本篇文章来自<A href='http://www.soidc.net'>IDC专家网</a> 原文链接:http://www.soidc.net/discuss/5/040101/00/555524_1.html