嘿所有我想串行化一個字符串列表到一個文件,然後加密它。 目前它只是不工作。 mscorlib.dll中發生未處理的類型'System.Runtime.Serialization.SerializationException'異常加密/解密一個序列化文件
附加信息:二進制流'199'不包含有效的BinaryHeader。可能的原因是序列化和反序列化之間無效的流或對象版本更改。
然後,我需要解密和deseralize它。繼承人是我到目前爲止有:
加密和seralizing:
public void EncryptFile(FileInfo targetFile, string password, List<string> lines)
{
int SaltSize = 8;
var keyGenerator = new Rfc2898DeriveBytes(password, SaltSize);
var rijndael = Rijndael.Create();
// BlockSize, KeySize in bit --> divide by 8
rijndael.IV = keyGenerator.GetBytes(rijndael.BlockSize/8);
rijndael.Key = keyGenerator.GetBytes(rijndael.KeySize/8);
using (var fileStream = targetFile.Create())
{
// write random salt
fileStream.Write(keyGenerator.Salt, 0, SaltSize);
using (var cryptoStream = new CryptoStream(fileStream, rijndael.CreateEncryptor(), CryptoStreamMode.Write))
{
var bformatter = new System.Runtime.Serialization.Formatters.Binary.BinaryFormatter();
bformatter.Serialize(fileStream, lines);
}
}
}
和聯合國seralizing和解密:
int SaltSize = 8;
Dictionary<string, string> settings = new Dictionary<string, string>();
var fileStream = File.Open(SettingsFile, FileMode.Open);
var salt = new byte[SaltSize];
fileStream.Read(salt, 0, SaltSize);
// initialize algorithm with salt
var keyGenerator = new Rfc2898DeriveBytes("Y8LwUKQVJkqRz2ZAKsAMtFWY", salt);
var rijndael = Rijndael.Create();
rijndael.IV = keyGenerator.GetBytes(rijndael.BlockSize/8);
rijndael.Key = keyGenerator.GetBytes(rijndael.KeySize/8);
// decrypt
using (var cryptoStream = new CryptoStream(fileStream, rijndael.CreateDecryptor(), CryptoStreamMode.Read))
{
var bformatter = new System.Runtime.Serialization.Formatters.Binary.BinaryFormatter();
List<string> settingsList = (List<string>)bformatter.Deserialize(cryptoStream);
foreach (string setting in settingsList)
{
string[] bothWords = setting.Split(',');
settings.Add(bothWords[0], bothWords[1]);
}
}
發佈完整例外。 – 2014-09-20 18:44:01
我發佈了完整的例外,謝謝 – Peter 2014-09-20 19:06:11
是*密碼*在* EncryptFile *「Y8LwUKQVJkqRz2ZAKsAMtFWY」? – 2014-09-20 19:09:49