C# 如何从内存C写入加密文件#

C# 如何从内存C写入加密文件#,c#,.net,encryption,aes,C#,.net,Encryption,Aes,我试图直接写入加密流,然后将其存储到文件中 我有下面的代码,但当我解密时,我得到的是垃圾,而不是我加密的消息 谁能帮助我在下面的代码中缺少什么 static void Main(string[] args) { string password = "pswd"; string fileName = "test.txt"; string msg = "Secret Message"; FileEncryptionExampl

我试图直接写入加密流,然后将其存储到文件中

我有下面的代码,但当我解密时,我得到的是垃圾,而不是我加密的消息

谁能帮助我在下面的代码中缺少什么

 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);
            }

        }

    }
}
  • 您的代码无法按原样编译-它需要一个
    char[]
    ,但您正在传递一个
    byte[]
  • 您正在将
    fs
    传递给StreamReader,而不是
    strm
  • 您可以使用以下选项:

    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 srDecrypt = new StreamReader(strm))
            {
                var str = srDecrypt.ReadToEnd();
                Console.WriteLine(str);
            }
        }
    }
    
    仅供参考-你的盐是难以置信的不安全。有关更多信息,请参阅

  • 您的代码无法按原样编译-它需要一个
    char[]
    ,但您正在传递一个
    byte[]
  • 您正在将
    fs
    传递给StreamReader,而不是
    strm
  • 您可以使用以下选项:

    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 srDecrypt = new StreamReader(strm))
            {
                var str = srDecrypt.ReadToEnd();
                Console.WriteLine(str);
            }
        }
    }
    
    仅供参考-你的盐是难以置信的不安全。有关更多信息,请参阅。

    这对您有用吗?这对您有用吗?