C# SHA384 Şifreleme

Herkese merhaba, C# yazılarımıza kaldığımız yerden devam ediyoruz. Bu yazımızda SHA384 şifreleme yapmayı anlatacağım. Hadi başlayalım !
Table of Contents
SHA Şifreleme Çeşitleri
SHA, Secure Hashing Algorithm’in kısaltması ve Türkçe anlamı Güvenli Karma Algoritma’dır. Genel olarak Bitcoin gibi kripto paralarda, para gönderimlerini doğrulamak için kullanılmaktadır. SHA şifrelemenin SHA1, SHA256, SHA384 ve SHA512 gibi çeşitleri bulunmakta ve tek yönlü bir şifreleme olduğu için tekrardan çözülemez. SHA384 şifreleme ile 385 bitlik bir şifre (hash) oluşturulur ve verilerin doğru olup olmadığını kontrol etmek için kullanılır.
System.Security.Cryptography Kütüphanesi
C# ile SHA384 şifreleme yapmak için System.Security.Cryptography kütüphanesini kullanmamız gerekiyor. Dolayısıyla bu kütüphaneyi kod yazacağımız C# dosyasında çağırmamız gerekiyor. Ayrıca şifrelemede kullanacağımız byte işlemleri için de System.Text kütüphanesini dosyamızda çağırmamız gerekiyor. Bunun için dosyanın en üstüne
using System.Security.Cryptography;
using System.Text;
kod satırlarını eklemeliyiz. Ardından bu kütüphane altındaki sınıf ve fonksiyonları kullanabiliriz.
SHA384 Sınıfı
SHA384 şifreleme yapmak için SHA384 adlı sınıfı kullanmamız gerekiyor ve elbette bu sınıfı kullanabilmek için yeni bir nesnesini türetmemiz gerekiyor fakat bu sınıfın yeni bir nesnesi constructor metodu ile değil kendi altında bulunan ve statik tipteki Create() fonksiyonu kullanılarak yapılıyor. Bu fonksiyon herhangi bir parametre istemiyor ve geriye SHA384 sınıfı nesnesi döndürüyor. Örneğin bu fonksiyonu kullanarak yeni bir SHA384 sınıfı nesnesi türetelim.
SHA384 sha384 = SHA384.Create();
Verinin Byte Dizisine Çevrilmesi
Ardından şifrelemek istediğimiz veriyi byte türüne çevirmemiz gerekiyor. Byte türüne çevirebilmek için de Encoding sınıfı altındaki UTF8 nesnesinin GetBytes() fonksiyonunu kullanacağız. Bu fonksiyon string tipte byte türüne çevrilecek veriyi istemekte ve geriye de byte dizisi döndürmekte. Öncelikle console üzerinden kullanıcıdan bir veri alalım ve bu veriyi bir değişkene atayalım ve dışarıdan aldığımız veriyi byte türüne çevirelim.
Console.Write("Şifrelenecek Veriyi Yazınız: ");
string sifrelenecekVeri = Console.ReadLine();
byte[] bytes = Encoding.UTF8.GetBytes(sifrelenecekVeri);
Şifreleme
Dışarıdan veri alıp byte dizisine çevirdiğimize göre artık şifrelemeyi yapabiliriz. Bunun için az önce oluşturduğumuz SHA384 nesnesi altındaki ComputeHash() fonksiyonunu kullanacağız. Bu fonksiyon parametre olarak bir tane byte dizisi istiyor ve geriye byte dizisi döndürüyor. Parametre olarak dışarıdan aldığımız verinin byte dizisi halini gönderebiliriz.
byte[] sifreliByte = sha384.ComputeHash(bytes);
Byte Dizisinden String’e Çevirme
Elimizde byte dizisi var fakat bu haliyle birşey anlamamız biraz zor çünkü byte dizisi içerisindeki veriler de byte yani 0-255 aralığında sayılar olacağından bizim anlayacağımız dilden değiller. Fakat byte dizisini bizim anlayabileceğimiz veritipi olan string’e çevirebiliriz. Bunun için BitConverter sınıfı altında bulunan ve statik tipte olan ToString() fonksiyonunu kullanacağız. Bu fonksiyon parametre olarak bir tane byte dizisi istiyor ve geriye gönderdiğimiz byte dizisinin string halini döndürüyor.
string sifreliVeri = BitConverter.ToString(sifreliByte);
Şifreli Verinin Düzenlenmesi
Buraya kadar olan kodları yazıp çalıştırdığınızda sifreliVeri değişkeni içerisinde 2 karakterde bir tire işareti (-) olduğunu göreceksiniz, bu şekilde kullanabilirim, bu benim daha çok işime yarar diyorsanız elbette kullanabilirsiniz fakat istersek aradaki tire işaretlerini de kaldırabiliriz. Bunun için string fonksiyonlarından olan Replace() fonksiyonunu kullanacağız. Bu fonksiyon değiştirilecek ifade ve yerine gelecek ifade olmak üzere 2 tane parametre istiyor ve geriye yine string döndürüyor. Bizim sifreliVeri değişkenimiz string tipte olduğu için doğrudan bunun altından Replace() fonksiyonuna ulaşabiliriz. Biz tire işaretlerini sileceğimiz için birinci parametre olarak -, ikinci parametre olarakta boş bir string göndereceğiz.
sifreliVeri = sifreliVeri.Replace("-", "");
Kullanıcıya Bildirme
Şifreleme işlemi tamamlandığına göre artık kullanıcıya gösterebiliriz;
Console.WriteLine(sifreleneceVeri + " Şifresi: " + sifreliVeri);
Tüm Kodlar
Evet tüm kodlarımız tamamlandı, yazdığımız kodları daha anlaşılabilir olması için aşağıya bırakıyorum;
SHA384 sha384 = SHA384.Create();
Console.Write("Şifrelenecek Veriyi Yazınız: ");
string sifrelenecekVeri = Console.ReadLine();
byte[] bytes = Encoding.UTF8.GetBytes(sifrelenecekVeri);
byte[] sifreliByte = sha384.ComputeHash(bytes);
string sifreliVeri = BitConverter.ToString(sifreliByte);
sifreliVeri = sifreliVeri.Replace("-", "");
Console.WriteLine(sifreleneceVeri + " Şifresi: " + sifreliVeri);
Tüm C# yazılarımıza buraya tıklayarak ulaşabilirsiniz. Herkese hayırlı günler.