0
Я пытаюсь написать прямо в зашифрованный поток, а затем сохранить его в файл.Как записать в зашифрованный файл из памяти C#
У меня есть код ниже, но когда я дешифрую, я получаю мусор не сообщение, которое я шифровал.
Может ли кто-нибудь помочь, чего мне не хватает в коде ниже?
static void Main(string[] args)
{
string password = "pswd";
string fileName = "test.txt";
string msg = "Secret Message";
FileEncryptionExample fe = new FileEncryptionExample();
fe.EncryptFileExample(fileName, password, msg);
fe.DecryptFileExample(fileName, password);
Console.WriteLine("Press any key...");
Console.ReadKey();
}
//------------------------------------------------------------------
public class FileEncryptionExample
{
public void DecryptFileExample(string fileName, string password)
{
byte[] salt = Encoding.ASCII.GetBytes(password.Length.ToString());
using (FileStream fs = new FileStream(fileName, FileMode.Open))
{
PasswordDeriveBytes secretKey = new PasswordDeriveBytes(password, salt);
RijndaelManaged rm = new RijndaelManaged();
CryptoStream strm = new CryptoStream(fs, rm.CreateDecryptor(secretKey.GetBytes(32), secretKey.GetBytes(16)), CryptoStreamMode.Read);
using (StreamReader sr = new StreamReader(fs))
{
while (!sr.EndOfStream)
{
byte[] data = new byte[12];
sr.Read(data, 0, 12);
Console.WriteLine(sr.ReadLine());
}
}
}
}
public void EncryptFileExample(string fileName, string password, string text)
{
StreamWriter sw = new StreamWriter(fileName);
byte[] salt = Encoding.ASCII.GetBytes(password.Length.ToString());
using (RijndaelManaged rm = new RijndaelManaged())
{
PasswordDeriveBytes secretKey = new PasswordDeriveBytes(password, salt);
using (CryptoStream strm = new CryptoStream(sw.BaseStream, rm.CreateEncryptor(secretKey.GetBytes(32), secretKey.GetBytes(16)), CryptoStreamMode.Write))
{
//sw.WriteLine(text);
byte[] data = Encoding.ASCII.GetBytes(text);
strm.Write(data, 0, data.Length);
}
}
}
}
Работает ли это для вас https://msdn.microsoft.com/en-us/library/system.security.cryptography.rijndaelmanaged(v=vs.110).aspx? – Thomas