Koray ÜSTÜNDAĞ

KORAY ÜSTÜNDAĞ

C# ile Yazının Hash Değerini Hesaplama

Merhaba, Bu örnekte C# ile herhangi bir yazının MD5, SHA-1, SHA256, SHA384 ve SHA512 hash değerinin nasıl hesaplanabileceğini anlatmaya çalışacağım. 

Şimdi önemli olan bir konudan bahsetmek istiyorum. Herhangi bir yazının hash değerini hesaplamak ciddi bir işlemdir. Hata kabul etmez. Hata yapmanız durumunda doğru hash değerini elde edemezsiniz. Buradaki hatadan kastım Yazının Encoding şeklidir.

Aşağıda (Ü) harfinin kodlama örneklerini göreceğiz.

Şimdi yukarıdaki örneklere göre UTF-8 karakterlerin hash karşılığı, UTF-16 karakterlerin hash karşılıkları ile aynı olamaz. Bu yüzden hash hesaplaması yaparken lütfen karakter encoding bölümüne dikkat edin. Bir program yazarken eğer UTF-8 Encoding biçimini tercih ederseniz ve hash hesaplaması yapacaksanız, lütfen encoding biçimini değiştirmeyin. Uzun lafın kısası: eğer kullanıcıdan UTF-8 karakter kodlamasında veri aldıysanız, hash değerini UTF-8 olarak hesaplayın.

Kullanılacak Kütüphaneler

				
					using System;
using System.Security.Cryptography; // Hash değerini hesaplamamız için gerekli kütüphane
using System.Text; // Encoding işlemleri için kullanıcağımız kütüphane
				
			

Hash Değeri Hesaplama

NOT: Buradaki kod hafıza dostu bir kod değildir.

				
					string yazi = "Deneme";
byte[] yaziBytes = Encoding.UTF8.GetBytes(yazi); // Burada UTF-8 karakter kodlamasını kullandık.
SHA256 sha = SHA256.Create();
byte[] sonuc = sha.ComputeHash(yaziBytes);
for (int i = 0; i < sonuc.Length; i++)
{
    Console.Write(sonuc[i].ToString("x2"));
}
Console.ReadLine();
				
			

Aşağıda örnek bir uygulama yapılmıştır.

				
					using System;
using System.Security.Cryptography;
using System.Text;

namespace KorayUstundag
{
    internal class Program
    {
        static void Main(string[] args)
        {
            string yazi = "Deneme";
            byte[] yaziBytes = Encoding.UTF8.GetBytes(yazi);
            SHA256 sha = SHA256.Create();
            byte[] sonuc = sha.ComputeHash(yaziBytes);
            for (int i = 0; i < sonuc.Length; i++)
            {
                Console.Write(sonuc[i].ToString("x2"));
            }
            Console.ReadLine();
        }
    }
}

				
			

Yukarıdaki örnek uygulamada “Deneme” yazısının SHA256 Hash değerini hesaplıyıp ekrana okunabilir bir hash değeri yazdırılmıştır.

Programı çalıştırdığınız zaman ekranda “a7ae1a431366f6d25f302684d2a7b67cec7ef1d1787b1d11c7ff1192bb4bdf46” çıktısını alacaksınız. Bu değer hiçbir zaman değişmez.

Şimdi isterseniz Memory Safe bir kod yazalım.

				
					using System;
using System.Security.Cryptography;
using System.Text;

namespace KorayUstundag
{
    internal class Program
    {
        static void Main(string[] args)
        {
            string yazi = "Deneme";
            StringBuilder hashDegeri = new StringBuilder();
            using (SHA256 sha = SHA256.Create())
            {
                byte[] sonuc = sha.ComputeHash(Encoding.UTF8.GetBytes(yazi));
                for (int i = 0; i < sonuc.Length; i++)
                {
                    hashDegeri.Append(sonuc[i].ToString("x2"));
                }
            }
            Console.WriteLine(hashDegeri.ToString());
            Console.ReadLine();
        }
    }
}

				
			

Şimdi Paylaş

Facebook
Twitter
LinkedIn

Bir cevap yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir