加密解密CryptoStream的问题

hahahawk 2004-02-02 11:01:17
加密字符串存在MemoryStream中解密为什么不成功?
byte[] b1 = new byte[16]{100,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15};
string s="",err="";

System.IO.MemoryStream ms = new MemoryStream();
// fs = File.Open(cryptfile,FileMode.Create,FileAccess.Write);
RijndaelManaged rm = new RijndaelManaged();
CryptoStream cs = new CryptoStream(ms, rm.CreateEncryptor(b1,b1), CryptoStreamMode.Write);
StreamWriter sw = new System.IO.StreamWriter(cs,System.Text.Encoding.Default);
sw.Write("good");
sw.Flush();
sw.Close();
cs.Close();
ms.Close();
byte[] buffer = ms.GetBuffer();
EchoBuf(buffer);

System.IO.MemoryStream ms2 = new MemoryStream(buffer);


CryptoStream cs2 = new CryptoStream(ms2, rm.CreateEncryptor(b1,b1), CryptoStreamMode.Read);
StreamReader sr = new System.IO.StreamReader(cs2,System.Text.Encoding.Default);
s=sr.ReadToEnd();
sr.Close();
cs2.Close();
ms2.Close();
MessageBox.Show("s=" + s);
byte[] buffer2 = ms2.GetBuffer();
EchoBuf(buffer2);
解密出来的s是乱字符。如果把MemoryStream换成FileStream则没问题。请指教。谢谢。
...全文
612 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
xixigongzhu 2004-02-03
  • 打赏
  • 举报
回复
GetBuffer是个问题,但主要问题出在:
CryptoStream cs2 = new CryptoStream(ms2, rm.CreateEncryptor(b1,b1), CryptoStreamMode.Read);

楼主两次都是CreateEncryptor,也就是说加了两次密,结果当然不对了。

第二次应该是解密:
CryptoStream cs2 = new CryptoStream(ms2, rm.CreateDecryptor(b1,b1), CryptoStreamMode.Read);
xixigongzhu 2004-02-03
  • 打赏
  • 举报
回复
不能用GetBuffer方法,试试ToArray方法。
hahahawk 2004-02-03
  • 打赏
  • 举报
回复
GetBuffer改成ToArray后,问题解决。使用GetBuffer后,字节数变成了256,无形中增长了,也许是这个原因引起的吧。另外,rm.CreateDecryptor写成了rm.CreateEncryptor是笔误,源程序中并没有错。
谢谢大家,特别是xixigongzhu.
八爪鱼-杭州 2004-02-02
  • 打赏
  • 举报
回复
MemoryStream 封装以无符号字节数组形式存储的数据
huangsuipeng 2004-02-02
  • 打赏
  • 举报
回复
UP

110,534

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧