C# ile text metin şifreleme ve şifresini çözme nasıl yapılır?

C# ile text metin şifreleme ve şifresini çözme nasıl yapılır?

 23.12.2015 15:04:46  C# .NET  (0)

C# ile text metin şifreleme  ve şifresini çözme nasıl yapılır?

bu yazımızda sizlere c# ile text dosyası içerisindeki bir metini nasıl şifreleyenceğiniz ve şifreli bir

metini nasıl şifresini çözeceğinizi anlatıyor olacağım.

Bunun için öncelikle visual studio ile bir web app projesi açın

ardından Crypto.cs adında bir classı projenize ekleyin

ve aşağıda yazmış olduğum kodları Crypto.cs adlı clasınıza kopyala yapıştır yapınız.

 

 

 

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Security.Cryptography;
using System.IO;

namespace WindowsFormsApplication10
{
    public class Crypto
    {
        private static byte[] _salt = Encoding.ASCII.GetBytes("o6806642kbM7c5");

        public static string SifreleAES(string plainText, string sharedSecret)
        {
            if (string.IsNullOrEmpty(plainText))
                throw new ArgumentNullException("plainText");
            if (string.IsNullOrEmpty(sharedSecret))
                throw new ArgumentNullException("sharedSecret");

            string outStr = null;                      
            RijndaelManaged aesAlg = null;            

            try
            {
               
                Rfc2898DeriveBytes key = new Rfc2898DeriveBytes(sharedSecret, _salt);               
                aesAlg = new RijndaelManaged();
                aesAlg.Key = key.GetBytes(aesAlg.KeySize / 8);

               
                ICryptoTransform encryptor = aesAlg.CreateEncryptor(aesAlg.Key, aesAlg.IV);

               
                using (MemoryStream msEncrypt = new MemoryStream())
                {
                   
                    msEncrypt.Write(BitConverter.GetBytes(aesAlg.IV.Length), 0, sizeof(int));
                    msEncrypt.Write(aesAlg.IV, 0, aesAlg.IV.Length);
                    using (CryptoStream csEncrypt = new CryptoStream(msEncrypt, encryptor, CryptoStreamMode.Write))
                    {
                        using (StreamWriter swEncrypt = new StreamWriter(csEncrypt))
                        {                          
                            swEncrypt.Write(plainText);
                        }
                    }
                    outStr = Convert.ToBase64String(msEncrypt.ToArray());
                }
            }
            finally
            {
               
                if (aesAlg != null)
                    aesAlg.Clear();
            }

           
            return outStr;
        }

        public static string SifreyiCozAES(string cipherText, string sharedSecret)
        {
            if (string.IsNullOrEmpty(cipherText))
                throw new ArgumentNullException("cipherText");
            if (string.IsNullOrEmpty(sharedSecret))
                throw new ArgumentNullException("sharedSecret");

           
            RijndaelManaged aesAlg = null;

          
            string plaintext = null;

            try
            {
               
                Rfc2898DeriveBytes key = new Rfc2898DeriveBytes(sharedSecret, _salt);

                               
                byte[] bytes = Convert.FromBase64String(cipherText);
                using (MemoryStream msDecrypt = new MemoryStream(bytes))
                {
                  
                    aesAlg = new RijndaelManaged();
                    aesAlg.Key = key.GetBytes(aesAlg.KeySize / 8);                  
                    aesAlg.IV = ReadByteArray(msDecrypt);
                    
                    ICryptoTransform decryptor = aesAlg.CreateDecryptor(aesAlg.Key, aesAlg.IV);
                    using (CryptoStream csDecrypt = new CryptoStream(msDecrypt, decryptor, CryptoStreamMode.Read))
                    {
                        using (StreamReader srDecrypt = new StreamReader(csDecrypt))

                         //yavuzmercan.com
                            plaintext = srDecrypt.ReadToEnd();
                    }
                }
            }
            finally
            {
              
                if (aesAlg != null)
                    aesAlg.Clear();
            }

            return plaintext;
        }

        private static byte[] ReadByteArray(Stream s)
        {
            byte[] rawLength = new byte[sizeof(int)];
            if (s.Read(rawLength, 0, rawLength.Length) != rawLength.Length)
            {
                throw new SystemException("Stream did not contain properly formatted byte array");
            }

            byte[] buffer = new byte[BitConverter.ToInt32(rawLength, 0)];
            if (s.Read(buffer, 0, buffer.Length) != buffer.Length)
            {
                throw new SystemException("Did not read byte array properly");
            }

            return buffer;
        }
    }
}

 

 

Class içerisindeki SifreleAES ve SifreyiCozAES statik metodlardır ve yeni bir sınıf örneği türetmeden kullanılabilirler.

Örnek kullanım;

Metni Şifreleme

string SifreliMetin = Crypto.SifreleAES("Şifrelenecek M", "PaylaşılanGizliAnahtar");

Şifreli Metni Çözme:

 string DesifreEdilmisMetin = Crypto.SifreyiCozAES(txtSifreli.Text, "PaylaşılanGizliAnahtar");

"PaylaşılanGizliAnahtar" AES ile şifreleme ve Şifre çözmede kullanılacak ortak paylaşılan paroladır. Rastgele seçilmelidir.

 Etiketler:

 Yorumlar

Ozan Eren - 23.12.2015 16:46:18
Yavuz hocam, yeni bloğunuz hayırlı olsun. çok beğendim başarılarınızın ve makalelerinizin devamını dilerim.

Yorum Gönder 

 Facebook Profil