C#中RSA 对数组解密的一点点问题 明显的问题:strtemp=strtemp + Encoding.ASCII.GetString(temp);这个不行 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 public static void Encrypt() { RSACryptoServiceProvider rsac = new RSACryptoServiceProvider(); byte[] src = new byte[64]; FileStream fs = new FileStream("miwen.txt", FileMode.Open, FileAccess.Read); FileStream res = new FileStream("Result.txt", FileMode.Create, FileAccess.Write); int len; MemoryStream ms = new MemoryStream(); while ((len = fs.Read(src, 0, 64)) > 0) { byte[] temp = new byte[len]; Array.Copy(src, 0, temp, 0, len); temp = rsac.Encrypt(temp, false); ms.Write(temp, 0, temp.Length); res.Write(temp, 0, temp.Length); } fs.Close(); res.Close(); StreamWriter sw = new StreamWriter("RSA.key"); sw.Write(rsac.ToXmlString(true)); sw.Close();}public static byte[] Decrypt() { StreamReader sr = new StreamReader("RSA.key"); String str = sr.ReadToEnd(); sr.Close(); RSACryptoServiceProvider rsac = new RSACryptoServiceProvider(); rsac.FromXmlString(str); FileStream fs = new FileStream("Result.txt", FileMode.Open, FileAccess.Read); byte[] temp1 = new byte[rsac.KeySize / 8]; int len; MemoryStream ms = new MemoryStream(); while ((len = fs.Read(temp1, 0, temp1.Length)) > 0) { byte[] src = new byte[len]; Buffer.BlockCopy(temp1, 0, src, 0, src.Length); src = rsac.Decrypt(src, false); ms.Write(src, 0, src.Length); } return ms.ToArray();} xixi 最近整天上来,是不是最近很有空啊?害得我都没生意做了。 呵呵,你的答案可能人家会不满意哦。人家明显要通过Base64保存……而且里面可能有点其它问题,正在改…… to sumtec(Psydian):仔细看看用到Base64的地方,其实没有什么意义,所以我才去掉的。 呵呵,如果人家想把这段密文通过XML和远程服务/客户进行交换呢?还是要有Base64吧? 呵呵,终于好了,不过不知道对不对,仅仅是手写的,没有调试过。另外,我不太明白xixi的代码Encrypt里面的ms有什么作用?似乎是去掉Base64遗留下来的?xixi来看一下有什么不妥的吧。public static void Encrypt() { RSACryptoServiceProvider rsac = new RSACryptoServiceProvider(); byte[] src = new byte[64]; temp[] temp; // #1 re-located, modified string sResult; // #2 add FileStream fs = new FileStream("miwen.txt", FileMode.Open, FileAccess.Read); FileStream res = new FileStream("Result.txt", FileMode.Create, FileAccess.Write); int len; MemoryStream ms = new MemoryStream(); while ((len = fs.Read(src, 0, 64)) > 0) { temp = new byte[len]; Array.Copy(src, 0, temp, 0, len); temp = rsac.Encrypt(temp, false); ms.Write(temp, 0, temp.Length); // #3 delete } fs.Close(); temp = ms.ToArray(); // #4 add sResult = Convert.ToBase64String(temp); // #5 add res.Write(System.Text.Encoding.ASCII.GetBytes(sResult)); // #6 add res.Close(); StreamWriter sw = new StreamWriter("RSA.key"); sw.Write(rsac.ToXmlString(true)); sw.Close();}public static byte[] Decrypt() { StreamReader sr = new StreamReader("RSA.key"); String str = sr.ReadToEnd(); sr.Close(); RSACryptoServiceProvider rsac = new RSACryptoServiceProvider(); rsac.FromXmlString(str); byte[] temp; // #1 re-located, renamed byte[] src; // #2 re-located, modified int len; // #2 re-located MemoryStream msBuff; // #3 re-located, modified MemoryStream msResult = new MemoryStream(); // #4 add string sBase64; // #5 add FileStream fs = new FileStream("Result.txt", FileMode.Open, FileAccess.Read); len = fs.Length; // #6 add temp = new byte[len]; // #7 add fs.Read(temp, 0, len); // #8 add fs.Close(); // #9 re-located sBase64 = System.Text.Encoding.ASCII.GetString(temp); // #10 add msBuff = new MemoryStream(Convert.FromBase64String(sBase64)); // #11 add(modified) temp = new byte[rsac.KeySize / 8]; // #12 modified while ((len = msBuff.Read(temp, 0, temp.Length)) > 0) { // #12 modified src = new byte[len]; Array.Copy(temp, 0, src, 0, len); // #13 modified src = rsac.Decrypt(src, false); msResult.Write(src, 0, src.Length); // #14 modified } return msResult.ToArray(); // #15 modified} http://expert.csdn.net/Expert/topic/2483/2483162.xml?temp=.3406946 sumtec(Psydian)这句有问题! len = fs.Length; // #6 add回家仔细研究研究 VS 问题,再次求帮助 读取XML节点数据的问题 tabControl和dataGridView的问题(分少,希望帮忙) 在Remoting服务中使用Image打开文件为何总说找不到文件?拜求高手指点 求助:操作数据库时sql语句不太会,急~ dll-hell的解决答案是什么? master page什么意思 关于flash控件不能全屏的问题 使用套接字编程时为什么我用StreamReader.ReadLine ()读取时如果内容是中文,读出来是乱码 哪里有C#语言的图书下载? C#是不是真的跨平台的? 给大家的圣诞礼物: FtpClient v3.0.4 beta发布 提供几本C#原版书
RSACryptoServiceProvider rsac = new RSACryptoServiceProvider();
byte[] src = new byte[64]; FileStream fs = new FileStream("miwen.txt", FileMode.Open, FileAccess.Read);
FileStream res = new FileStream("Result.txt", FileMode.Create, FileAccess.Write);
int len; MemoryStream ms = new MemoryStream();
while ((len = fs.Read(src, 0, 64)) > 0)
{
byte[] temp = new byte[len];
Array.Copy(src, 0, temp, 0, len);
temp = rsac.Encrypt(temp, false);
ms.Write(temp, 0, temp.Length);
res.Write(temp, 0, temp.Length);
}
fs.Close();
res.Close();
StreamWriter sw = new StreamWriter("RSA.key");
sw.Write(rsac.ToXmlString(true));
sw.Close();
}public static byte[] Decrypt() {
StreamReader sr = new StreamReader("RSA.key");
String str = sr.ReadToEnd();
sr.Close();
RSACryptoServiceProvider rsac = new RSACryptoServiceProvider();
rsac.FromXmlString(str);
FileStream fs = new FileStream("Result.txt", FileMode.Open, FileAccess.Read);
byte[] temp1 = new byte[rsac.KeySize / 8];
int len;
MemoryStream ms = new MemoryStream();
while ((len = fs.Read(temp1, 0, temp1.Length)) > 0) {
byte[] src = new byte[len];
Buffer.BlockCopy(temp1, 0, src, 0, src.Length);
src = rsac.Decrypt(src, false);
ms.Write(src, 0, src.Length);
}
return ms.ToArray();
}
仔细看看用到Base64的地方,其实没有什么意义,所以我才去掉的。
另外,我不太明白xixi的代码Encrypt里面的ms有什么作用?似乎是去掉Base64遗留下来的?
xixi来看一下有什么不妥的吧。public static void Encrypt() {
RSACryptoServiceProvider rsac = new RSACryptoServiceProvider();
byte[] src = new byte[64];
temp[] temp; // #1 re-located, modified
string sResult; // #2 add FileStream fs = new FileStream("miwen.txt", FileMode.Open, FileAccess.Read);
FileStream res = new FileStream("Result.txt", FileMode.Create, FileAccess.Write);
int len;
MemoryStream ms = new MemoryStream(); while ((len = fs.Read(src, 0, 64)) > 0)
{
temp = new byte[len];
Array.Copy(src, 0, temp, 0, len);
temp = rsac.Encrypt(temp, false);
ms.Write(temp, 0, temp.Length);
// #3 delete
}
fs.Close();
temp = ms.ToArray(); // #4 add
sResult = Convert.ToBase64String(temp); // #5 add
res.Write(System.Text.Encoding.ASCII.GetBytes(sResult)); // #6 add res.Close();
StreamWriter sw = new StreamWriter("RSA.key");
sw.Write(rsac.ToXmlString(true));
sw.Close();
}public static byte[] Decrypt() {
StreamReader sr = new StreamReader("RSA.key");
String str = sr.ReadToEnd();
sr.Close();
RSACryptoServiceProvider rsac = new RSACryptoServiceProvider();
rsac.FromXmlString(str);
byte[] temp; // #1 re-located, renamed
byte[] src; // #2 re-located, modified
int len; // #2 re-located
MemoryStream msBuff; // #3 re-located, modified
MemoryStream msResult = new MemoryStream(); // #4 add
string sBase64; // #5 add
FileStream fs = new FileStream("Result.txt", FileMode.Open, FileAccess.Read);
len = fs.Length; // #6 add
temp = new byte[len]; // #7 add
fs.Read(temp, 0, len); // #8 add
fs.Close(); // #9 re-located sBase64 = System.Text.Encoding.ASCII.GetString(temp); // #10 add
msBuff = new MemoryStream(Convert.FromBase64String(sBase64)); // #11 add(modified)
temp = new byte[rsac.KeySize / 8]; // #12 modified
while ((len = msBuff.Read(temp, 0, temp.Length)) > 0) { // #12 modified
src = new byte[len];
Array.Copy(temp, 0, src, 0, len); // #13 modified
src = rsac.Decrypt(src, false);
msResult.Write(src, 0, src.Length); // #14 modified
}
return msResult.ToArray(); // #15 modified
}
回家仔细研究研究