Criptare e decriptare file in C#

Mattepuffo's logo
Criptare e decriptare file in C#

Criptare e decriptare file in C#

Oggi vediamo come criptare e decriptare file usando C#.

Come algoritmo useremo Aes.

La chiave di cifratura sarà, ovviamente, la stessa.

Useremo la crittografia simmetrica, e non installeremo librerie esterne.

Con la funzione crypt inseriremo del testo nel file e lo cripteremo.

Con la funzione decrypt leggeremo il file e visualizzeremo il testo in console.

Ecco il codice:

using System;
using System.IO;
using System.Security.Cryptography;

namespace CSharpTest
{
    class Program
    {
        static void Main(string[] args)
        {
            var strFile = "test.txt";

            byte[] key = { 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16 };

            crypt(strFile, key);
            Console.WriteLine("---");
            decrypt(strFile, key);
        }

        static void crypt(String file, byte[] key)
        {
            using (FileStream fs = new FileStream(file, FileMode.OpenOrCreate))
            {
                using (Aes aes = Aes.Create())
                {
                    aes.Key = key;
                    byte[] iv = aes.IV;
                    fs.Write(iv, 0, iv.Length);

                    using (CryptoStream cryptStream = new CryptoStream(fs, aes.CreateEncryptor(), CryptoStreamMode.Write))
                    {
                        using (StreamWriter sWriter = new StreamWriter(cryptStream))
                        {
                            sWriter.WriteLine("Ciao!!");
                            Console.WriteLine("File criptato");
                        }
                    }
                }
            }
        }

        static void decrypt(String file, byte[] key)
        {
            using (FileStream fs = new FileStream(file, FileMode.OpenOrCreate))
            {
                using (Aes aes = Aes.Create())
                {
                    byte[] iv = new byte[aes.IV.Length];
                    fs.Read(iv, 0, iv.Length);

                    using (CryptoStream cryptStream = new CryptoStream(fs, aes.CreateDecryptor(key, iv), CryptoStreamMode.Read))
                    {
                        using (StreamReader sReader = new StreamReader(cryptStream))
                        {
                            Console.WriteLine("Contenuto del file: {0}", sReader.ReadToEnd());
                        }
                    }
                }
            }
        }
    }
}

Non ho impostato eccezioni su eventuali errori; ovviamente fatelo se ne avete bisogno.

Enjoy!


Share this Post

Commentami!