首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 网站开发 > asp.net >

DES的有关问题

2012-01-28 
DES的问题privatestringiv23456789 privatestringkey34567890 privateEncodingencodingnewUnicod

DES的问题
private   string   iv   =   "23456789 ";
private   string   key   =   "34567890 ";
private   Encoding   encoding   =   new   UnicodeEncoding();
加密是这样的
  public   string   EncryptString(string   str)**************
                {
                        byte[]   ivb   =   Encoding.ASCII.GetBytes(this.iv);
                        byte[]   keyb   =   Encoding.ASCII.GetBytes(this.EncryptKey);//加密密钥
                        byte[]   toEncrypt   =   this.EncodingMode.GetBytes(str);//加密的内容
                        byte[]   encrypted;
                        ICryptoTransform   encryptor   =   des.CreateEncryptor(keyb,   ivb);
                        MemoryStream   msEncrypt   =   new   MemoryStream();
                        CryptoStream   csEncrypt   =   new   CryptoStream(msEncrypt,   encryptor,   CryptoStreamMode.Write);
                        csEncrypt.Write(toEncrypt,   0,   toEncrypt.Length);
                        csEncrypt.FlushFinalBlock();
                        encrypted   =   msEncrypt.ToArray();
                        csEncrypt.Close();
                        msEncrypt.Close();
                        //return   encrypted;***************************************
                        return   this.EncodingMode.GetString(encrypted);
                }
解密是
  public   string   DecryptString(string   str)**********************
                {
                        byte[]   ivb   =   Encoding.ASCII.GetBytes(this.iv);
                        byte[]   keyb   =   Encoding.ASCII.GetBytes(this.EncryptKey);
                        byte[]   toDecrypt   =   this.EncodingMode.GetBytes(str);**********
                        byte[]   deCrypted   =   new   byte[toDecrypt.Length];
                        ICryptoTransform   deCryptor   =   des.CreateDecryptor(keyb,   ivb);
                        MemoryStream   msDecrypt   =   new   MemoryStream(toDecrypt);
                        CryptoStream   csDecrypt   =   new   CryptoStream(msDecrypt,   deCryptor,   CryptoStreamMode.Read);


                        try
                        {
                                csDecrypt.Read(deCrypted,   0,   deCrypted.Length);
                        }
                        catch   (Exception   err)
                        {
                                throw   new   ApplicationException(err.Message);
                        }
                        finally
                        {
                                try
                                {
                                        msDecrypt.Close();
                                        csDecrypt.Close();
                                }
                                catch   {   ;}
                        }
                        return   this.EncodingMode.GetString(deCrypted);
                }
这样,加密的过程是正常的,但是解密的过程就出现错误,原因解密数据长度不正确。应该是加密后的数据出现丢失,但是我直接把加密数据传给解密函数也不对
于是我就把加密数据返回值改为byte[],解密函数的参数类型改为byte[]。这样就正常了,但是我想知道为什么会出现这种情况?什么原因造成了数据不完整,该注意什么地方?这是加密个字符串,如果加密文件发生数据丢失岂不是没法解密了?

[解决办法]
不了解。帮顶吧
[解决办法]
encrypted可以用ToBase64String方法转为字符串。
解密时用FromBase64String方法转成byte[]

热点排行