Yazdığınız programın bazı verileri text dosyasına kaydetmesi ve belli süreliğine burada tutması gerebilir. Özellikle veri tabanı gibi gizli tutulması gereken dijital alanların erişim bilgileri “HOST” bilgisayarda tutulması gerekir.  Bu bilgilere başkaları tarafından ulaşılması istenmez. Böyle durumlarda bu bilgileri şifrelemek için çeşitli yollar kullanılıyor.

images (1)

 

Visual C#, kullanıcıları için şifreleme olayını kolaylaştıran çeşitli kütüphaneler barındırıyor.  Bu kütüphaneleri kullanarak istediğiniz dosyaları şifreleyip istediğiniz dosyaların şifresini çözerek bilgilerine erişebilirsiniz.

 

Dosya şifreleme için programınıza eklemeniz gereken kütüphaneler şunlar;

System.IO
System.Security
System.Security.Cryptography

C# içerisinde otomatik şifre üremek için başka bir fonksiyon kullanabilirsiniz. Ya da 16 basamakdan(digit) oluşan kendi şifrenizi oluşturabilirsiniz.   Şifre üremek için kullanılan fonksiyon ise şu şekilde;

        static string GenerateKey()
        {
            DESCryptoServiceProvider desCrypto = (DESCryptoServiceProvider)DESCryptoServiceProvider.Create();
           return ASCIIEncoding.ASCII.GetString(desCrypto.Key);
        }

Dosyayı şifrelemek için yazmamız gereken fonksiyon şu şekilde;

 private static void EncryptFile(string inputFile, string outputFile, string skey)
        {
            try
            {
                using (RijndaelManaged aes = new RijndaelManaged())
                {
                    byte[] key = ASCIIEncoding.UTF8.GetBytes(skey);

                    byte[] IV = ASCIIEncoding.UTF8.GetBytes(skey);

                    using (FileStream fsCrypt = new FileStream(outputFile, FileMode.Create))
                    {
                        using (ICryptoTransform encryptor = aes.CreateEncryptor(key, IV))
                        {
                            using (CryptoStream cs = new CryptoStream(fsCrypt, encryptor, CryptoStreamMode.Write))
                            {
                                using (FileStream fsIn = new FileStream(inputFile, FileMode.Open))
                                {
                                    int data;
                                    while ((data = fsIn.ReadByte()) != -1)
                                    {
                                        cs.WriteByte((byte)data);
                                    }
                                }
                            }
                        }
                    }
                }
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message);
            }
        }

Bu dosyanın şifresini çözerek okumak için yazmamız gereken fonksiyon şu şekilde

private static void DecryptFile(string inputFile, string outputFile, string skey)
        {
            try
            {
                using (RijndaelManaged aes = new RijndaelManaged())
                {
                    byte[] key = ASCIIEncoding.UTF8.GetBytes(skey);

                   
                    byte[] IV = ASCIIEncoding.UTF8.GetBytes(skey);

                    using (FileStream fsCrypt = new FileStream(inputFile, FileMode.Open))
                    {
                        using (FileStream fsOut = new FileStream(outputFile, FileMode.Create))
                        {
                            using (ICryptoTransform decryptor = aes.CreateDecryptor(key, IV))
                            {
                                using (CryptoStream cs = new CryptoStream(fsCrypt, decryptor, CryptoStreamMode.Read))
                                {
                                    int data;
                                    while ((data = cs.ReadByte()) != -1)
                                    {
                                        fsOut.WriteByte((byte)data);
                                    }
                                }
                            }
                        }
                    }
                }
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message); 
            }
        }

 

Dosyayı şifrelemek için bu fonksiyonları ana program bloğunda şu şekilde kullanıyoruz;

EncryptFile("Şifrelemek istenilen dosyanın yeri", "Şifrelenen dosyanın yeri", "16 basamak şifre);

Örnek;

EncryptFile("C:\secret_file.txt", "C:\secret_file_s.txt","1234567891234567");

Dosyanın şifresini çözmek için bu fonksiyonları ana program bloğunda şu şekilde kullanıyoruz;

DecryptFile("Şifrelenmiş Dosyanın Yeri", "Şifresi çözülen dosyanın yeri", "16 Basamak şifre");

Örnek;

EncryptFile("C:\secret_s_file.txt", "C:\secret_file_2s.txt","1234567891234567");