C# String Şifreleme Metodu

Konu sahibi son olarak 954 gün önce görüldü
Açıklama

Aşağıdaki Metodlar ile bir string degeri benzersiz bir anahtar olarak şifreleyebilirsiniz. Keysize kısmında yazan 256 size 256 bitlik bir şifreleme yapacağını ifade eder. Aslında uzun uzun bütün satırları açıklamak isterdim fakat pek sabırlı değilim sanırım :). Özetle bir String değeri kendinize özgü şifreleyebilir ve şifrelediğiniz değeri sadece siz açabilirsiniz.


Örnek Kullanım:

Kod:
                            string deneme = "Örnek Değer";
                            string sifrelenmis_deger = deneme.Encrypt("123456");
Örnek Notu:

Metod parametreleri this string olarak başladığı için sınıfın tüm alt sınıflarında herhangi bir string değere .(nokta) dedikten sonra direk olarak karşınıza şifreleme ve şifre açma metodları gelecektir.

Örnek 2 Kullanım:


Kod:
                           string sifrelenmis_deger = Cry.Encrypt("Örnek Değer","123456");
Örnek Notu:

Bu örnekte ise metod static olduğu için sınıf kurulumuna gerek duymadan direk sınıfa bağlı metod olarak dilediğiniz her yerde kullanabilirsiniz.

Dip Not:

Sonda yazan 123456 değeri ise metni sizden başkasının açamaması için kullanacağınız özel şifredir.


Şifreleme işlemi için;
Kod:
public static class Cry
    {
        private const int Keysize = 256;
        private const int DerivationIterations = 1000;
        public static string Encrypt(this string plainText, string passPhrase)
        {
            var saltStringBytes = Generate256BitsOfRandomEntropy();
            var ivStringBytes = Generate256BitsOfRandomEntropy();
            var plainTextBytes = Encoding.UTF8.GetBytes(plainText);
            using (var password = new Rfc2898DeriveBytes(passPhrase, saltStringBytes, DerivationIterations))
            {
                var keyBytes = password.GetBytes(Keysize / 8);
                using (var symmetricKey = new RijndaelManaged())
                {
                    symmetricKey.BlockSize = 256;
                    symmetricKey.Mode = CipherMode.CBC;
                    symmetricKey.Padding = PaddingMode.PKCS7;
                    using (var encryptor = symmetricKey.CreateEncryptor(keyBytes, ivStringBytes))
                    {
                        using (var memoryStream = new MemoryStream())
                        {
                            using (var cryptoStream = new CryptoStream(memoryStream, encryptor, CryptoStreamMode.Write))
                            {
                                cryptoStream.Write(plainTextBytes, 0, plainTextBytes.Length);
                                cryptoStream.FlushFinalBlock();
                                var cipherTextBytes = saltStringBytes;
                                cipherTextBytes = cipherTextBytes.Concat(ivStringBytes).ToArray();
                                cipherTextBytes = cipherTextBytes.Concat(memoryStream.ToArray()).ToArray();
                                memoryStream.Close();
                                cryptoStream.Close();
                                return Convert.ToBase64String(cipherTextBytes);
                            }
                        }
                    }
                }
            }
        }

Şifrelenmiş Değeri Açmak için;

Kod:
 public static string Decrypt(this string cipherText, string passPhrase)
        {
            var cipherTextBytesWithSaltAndIv = Convert.FromBase64String(cipherText);
            var saltStringBytes = cipherTextBytesWithSaltAndIv.Take(Keysize / 8).ToArray();
            var ivStringBytes = cipherTextBytesWithSaltAndIv.Skip(Keysize / 8).Take(Keysize / 8).ToArray();
            var cipherTextBytes = cipherTextBytesWithSaltAndIv.Skip((Keysize / 8) * 2).Take(cipherTextBytesWithSaltAndIv.Length - ((Keysize / 8) * 2)).ToArray();
            using (var password = new Rfc2898DeriveBytes(passPhrase, saltStringBytes, DerivationIterations))
            {
                var keyBytes = password.GetBytes(Keysize / 8);
                using (var symmetricKey = new RijndaelManaged())
                {
                    symmetricKey.BlockSize = 256;
                    symmetricKey.Mode = CipherMode.CBC;
                    symmetricKey.Padding = PaddingMode.PKCS7;
                    using (var decryptor = symmetricKey.CreateDecryptor(keyBytes, ivStringBytes))
                    {
                        using (var memoryStream = new MemoryStream(cipherTextBytes))
                        {
                            using (var cryptoStream = new CryptoStream(memoryStream, decryptor, CryptoStreamMode.Read))
                            {
                                var plainTextBytes = new byte[cipherTextBytes.Length];
                                var decryptedByteCount = cryptoStream.Read(plainTextBytes, 0, plainTextBytes.Length);
                                memoryStream.Close();
                                cryptoStream.Close();
                                return Encoding.UTF8.GetString(plainTextBytes, 0, decryptedByteCount);
                            }
                        }
                    }
                }
            }
        }
 
@KafKef hoca hosgeldin, bu şekilde faydalı paylaşımla geldiğini görmek ayrıca sevindirdi :emoji_slight_smile:
 
Geri