这段加密代码为什么会出错?

lswjp 2003-08-20 12:29:03
当第一次使用时保存成abc.dt的时候没有问题,可是如果已经保存过了,那下次在输入的好多字符都不能作为密码了,如我输入aaa作这密码,就出错了,出错代码为

"在索引80处发现无后续低代理项的高代理项字符.输入可能不在此编码内,或者不包含有效的Unicode(UTF-16)字符。参数名:chars"

想请教大家这是为什么?



public class jm
{
private static byte[] deskey=new byte[]{1,2,3,2,3,4,5,8};
private static byte[] desiv=new byte[]{1,2,3,2,3,4,5,8};
/// <summary>
/// 如果isEncrypt为true,则为加密,为false,则为解密
/// </summary>
public static string Encrypt(string plainText,bool isEncrypt)
{

byte[] inArray=(new UnicodeEncoding()).GetBytes(plainText); //需要加密的字符串;
byte[] tmpArray=new Byte[100]; //加密缓冲区

MemoryStream inMs=new MemoryStream(inArray); //建立两个流,用来做临时存放字符串区
MemoryStream outMs=new MemoryStream(inArray.Length);

DES des=new DESCryptoServiceProvider();
CryptoStream cs;
if(isEncrypt)
cs = new CryptoStream(outMs,des.CreateEncryptor(deskey,desiv),CryptoStreamMode.Write);
else
cs = new CryptoStream(outMs,des.CreateDecryptor(deskey,desiv),CryptoStreamMode.Write);

int len=0,rdlen=0,tlen=inArray.Length;
while(rdlen<tlen)
{
len=inMs.Read(tmpArray,0,100);
cs.Write(tmpArray,0,len);
rdlen+=len;
}
cs.FlushFinalBlock();
cs.Close();

return((new UnicodeEncoding()).GetString(outMs.ToArray()));
}
}

上面是加密类,下面是调用的代码
FileStream fs=new FileStream("abc.dt",FileMode.OpenOrCreate,FileAccess.Write);
StreamWriter sw=new StreamWriter(fs);

sw.WriteLine("servername="+serveraddress.Text.Trim());
sw.WriteLine("dataname="+dataname.Text.Trim());
sw.WriteLine("username="+jm.Encrypt(username.Text.Trim(),true));
sw.WriteLine("password="+jm.Encrypt(password.Text.Trim(),true));
sw.Close();
fs.Close();
MessageBox.Show("保存成功!");

...全文
18 1 打赏 收藏 转发到动态 举报
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
xixigongzhu 2003-09-12
  • 打赏
  • 举报
回复
StreamWriter sw=new StreamWriter(fs,Encoding.Unicode);

记得取数据时也用这个:
StreamReader sr = new StreamReader(fs,Encoding.Unicode);

110,539

社区成员

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

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

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