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[]