解密之后信息带有乱字符,问题在哪里?

shyworm 2004-04-02 05:40:18
代码不复杂:

string msg = "Hello World!"; //需要加密的信息
byte[] buf = Encoding.Unicode.GetBytes(msg);

RijndaelManaged rm = new RijndaelManaged();
//=======================================================================
MemoryStream inStream = new MemoryStream(buf);
MemoryStream outStream = new MemoryStream();
CryptoStream cStream = new CryptoStream(outStream,
rm.CreateEncryptor(rm.Key,rm.IV),CryptoStreamMode.Write);

inStream.WriteTo(cStream);//加密
//=======================================================================
byte[] cbuf = outStream.GetBuffer();
string cstr = Encoding.Unicode.GetString(cbuf);
Console.WriteLine(cstr);// 加密之后的数据
//=======================================================================
MemoryStream inCryptoStream = new MemoryStream(cbuf);
MemoryStream outDecStream = new MemoryStream();
CryptoStream DecStream = new CryptoStream(outDecStream,
rm.CreateDecryptor(rm.Key,rm.IV),CryptoStreamMode.Write);

inCryptoStream.WriteTo(DecStream);//解密
//=======================================================================
byte[] decbuf = outDecStream.GetBuffer();
string decstr = Encoding.Unicode.GetString(decbuf,0,buf.Length);
Console.WriteLine(decstr); //解密之后的信息



但是解密之后的信息后面成了乱字符:
Hello Wo?替?鳃

请大侠们多指点,错误究竟在哪里?
...全文
74 11 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
Jinniu 2004-04-05
  • 打赏
  • 举报
回复
zushenf(一堆大便)的办法可行!
shyworm 2004-04-05
  • 打赏
  • 举报
回复
非常感谢zushenf(一堆大便)!结贴了
zushenf 2004-04-03
  • 打赏
  • 举报
回复
兄弟直接用我的吧,我已经调试通过
zushenf 2004-04-03
  • 打赏
  • 举报
回复
string msg = "Hello World!"; //需要加密的信息
byte[] buf = Encoding.Unicode.GetBytes(msg);

RijndaelManaged rm = new RijndaelManaged();
rm.GenerateKey();
rm.GenerateIV();
byte[] key = rm.Key;
byte[] iv = rm.IV;

MemoryStream outStream = new MemoryStream();
CryptoStream cStream = new CryptoStream(outStream,
rm.CreateEncryptor(key,iv),CryptoStreamMode.Write);


cStream.Write(buf,0,buf.Length);
cStream.FlushFinalBlock();
//inStream.WriteTo(cStream);//加密
//=======================================================================

byte[] cbuf = outStream.ToArray();
string cstr = Encoding.Unicode.GetString(cbuf);
textBox1.Text = cstr;
//Console.WriteLine(cstr);// 加密之后的数据
//=======================================================================
MemoryStream inCryptoStream = new MemoryStream(cbuf);
CryptoStream DecStream = new CryptoStream(inCryptoStream,
rm.CreateDecryptor(key,iv),CryptoStreamMode.Read);
byte[] fuck = new byte[cbuf.Length];
//StreamReader reader = new StreamReader(DecStream,Encoding.Unicode );
DecStream.Read(fuck,0,fuck.Length);
cstr = Encoding.Unicode.GetString(fuck);
//=======================================================================

//string decstr = reader.ReadToEnd();
//Console.WriteLine(decstr); //解密之后的信息
textBox2.Text = cstr;
shyworm 2004-04-03
  • 打赏
  • 举报
回复
一致的啊,你们看前面的半截都是解对了的。
GetChars我再试试。
hivak47 2004-04-03
  • 打赏
  • 举报
回复
解密和加密你的编码要一致。
flyingbirddhp 2004-04-03
  • 打赏
  • 举报
回复
你换成Encoding.ASCII试试;
还有一个可能,就是你编码是用的Encoding.Unicode.GetBytes()
解码的时候最好用对应的Encoding,Unicode.GetChars(),不要用GetString()
你试试看,毕竟字符数组和字符串还是大不一样的
sunruping 2004-04-03
  • 打赏
  • 举报
回复
幫你頂一下!
shyworm 2004-04-03
  • 打赏
  • 举报
回复
Encoding都是用Unicode啊
riffleliu 2004-04-03
  • 打赏
  • 举报
回复
幫你頂一下!
HNU 2004-04-02
  • 打赏
  • 举报
回复


不太了解,检查一下 Encoding

111,094

社区成员

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

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

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