使用MD5CryptoServiceProvider,TripleDESCryptoServiceProvider和ICryptoTransform解密文件

时间:2018-12-12 13:01:29

标签: c# streamwriter

是否熟悉MD5CryptoServiceProvider,TripleDESCryptoServiceProvider和ICryptoTransform的使用? enter image description here 我成功加密了文件,并使用StreamWriter将其写入文本文件,但是使用StreamReader读取文件并尝试解密文本时会出现问题。

错误消息声称“输入不是有效的Base-64字符串,因为它包含非Base 64字符,两个以上的填充字符或填充字符中的非法字符。”

已使用以下代码对文件进行加密:

string datetime = DateTime.Now.ToString();
string hash = (encrypted file here);
byte[] data = UTF8Encoding.UTF8.GetBytes(hash);
using (MD5CryptoServiceProvider md5 = new MD5CryptoServiceProvider())
{
byte[] keys = md5.ComputeHash(UTF8Encoding.UTF8.GetBytes(hash));
using (TripleDESCryptoServiceProvider tripDes = new TripleDESCryptoServiceProvider() { Key = keys, Mode = CipherMode.ECB, Padding = PaddingMode.PKCS7 })
{
ICryptoTransform transforms = tripDes.CreateEncryptor();
byte[] results = transforms.TransformFinalBlock(data, 0, data.Length);hash = Convert.ToBase64String(results, 0, results.Length);
}

解密代码如下:

byte[] data = Convert.FromBase64String(text source here);
using (MD5CryptoServiceProvider md5 = new MD5CryptoServiceProvider())
{
byte[] keys = md5.ComputeHash(UTF8Encoding.UTF8.GetBytes(text source here));
using (TripleDESCryptoServiceProvider tripDes = new TripleDESCryptoServiceProvider() { Key = keys, Mode = CipherMode.ECB, Padding = PaddingMode.PKCS7 })
{
ICryptoTransform transforms = tripDes.CreateDecryptor();
byte[] results = transforms.TransformFinalBlock(data, 0, data.Length);
(text source here) = UTF32Encoding.UTF8.GetString(results);
}
}

我尝试了所有填充选项,但无济于事。有关如何解决问题的任何见解,建议或有根据的猜测?

是否已知StreamWriter会将额外的字符添加到导致此问题的加密文本中?如果是这样,您建议使用哪种方法对C#中的文件进行加密和解密?

0 个答案:

没有答案