C# programlama dilinde SHA1 hash algoritması ile birlikte bu algoritmanın simetrik algoritma veya simetrik şifreleme mantığı ile birleştirilmiş HMACSHA1 algoritması da vardır. HMACSHA1 algoritmasının temel amacı SHA1 algoritmasındaki şifreleme mantığını simetrik şifreleme ile birleştirerek bir güvenlik katmanı daha eklemektir. Algoritma çıktısı 40 karakterden ibaret olan SHA1 algoritmasının mapping yapılarak çözülmesi zor olsa da imkansızdır diyemeyiz. Simetrik algoritmayla birleşmesi ise şifrelenmiş bir metnin çözülmesini çok zorlaştırır. Bu açıdan bakıldığında HMACSHA1 algoritmasının kullanılmasının güvenlik açısından SHA1 algoritmasına göre daha avantajlı olduğunu söyleyebiliriz.
HMACSHA1 hash algoritmalarının projelerde kullanılabilmesi için SHA1 algoritmasında olduğu gibi projeye System.Security.Cryptography isim uzayının eklenmesi gerekiyor. Bu ekleme işlemi haricinde HMACSHA1 algoritmasında bitler düzeyinde işlem yaptığı için ilk önce hash algoritması uygulanacak metnin byte dizisine dönüştürülmesi gerekiyor. Bu işlemden sonra elde ettiğiniz şifreli metin üzerinde de Replace işlemi yapacağız. Replace işleminin amacı ise şifreli metin sonucunda metin içerisindeki '-' karakterini atmaktır. Burada çok önemli bir nokta vardır ki HMACSHA1 algoritması algoritmayı uygularken byte dizisi üzerinde işlem yaptığı için her türlü elektronik veri bu algoritma kullanılarak hashlene bilir. Yani algoritma girdisi her zaman metin olamak zorunda değildir. Byte dizisine dönüştürdüğünüz her veri üzerinde bu işlemi yapabilirsiniz.
Algoritmanın C# programlama dili için tanıtımından önce biraz HMACSHA1 'den bahsetmek istiyorum. HMACSHA1 hash algoritmalarından bir tanesidir ve SHA1 algoritmasının simetrik halidir. (Hash algoritmaları ile ilgili detaylı bilgi almak isterseniz buradaki makaleye göz atabilirsiniz) Algoritma sonucunda 160 bit veya 40 hexadecimal şifreli metin üretilir. Hash algoritmasının mantığı gereği üretilen karakter uzunlukları her zaman 40 hexadecimal sayıdır.
C# programlama dilinde HMACSHA1 algoritmasının uygulanabilmesi için HMACSHA1 sınıfından yeni bir nesne üretmek ve bu sınıfın ComputeHash metodunu kullanmak gerekiyor. Bu uygulamanın yapıldığı örnek aşağıda yer almaktadır.
Bu anlatımlardan sonra artık C# programlama dilinde HMACSHA1 algoritmasının uygulamasına geçebiliriz. Bu uygulama için yazdığım kodlar aşağıdadır.
internal protected HashFunctionResponse ExecuteHMACSHA1Algorithm(HashFunctionRequest request)
{
var response = new HashFunctionResponse
{
Success = false,
Exception = null,
Message = EHashFunctionMessage.IntializeAlgoritm,
HashFunctionResult = null
};
try
{
var password = Encoding.UTF8.GetBytes(request.Password);
var plainttext = Encoding.UTF8.GetBytes(request.PlainText);
using (var hmacmSha1provider = new HMACSHA1(password))
{
var hash = hmacmSha1provider.ComputeHash(plainttext);
response.HashFunctionResult = BitConverter.ToString(hash).Replace("-", "");
}
response.Success = true;
response.Exception = null;
response.Message = EHashFunctionMessage.Success;
}
catch (InvalidOperationException invalidOperationException)
{
response.Success = false;
response.Exception = invalidOperationException;
response.Message = EHashFunctionMessage.InvalidOperationException;
response.HashFunctionResult = null;
}
catch (Exception exception)
{
response.Success = false;
response.Exception = exception;
response.Message = EHashFunctionMessage.UnexpectedException;
response.HashFunctionResult = null;
}
return response;
}
Algoritma için önemli olan nokta algoritmanın uygulanabilmesi için girdi olarak şifre ve şifrelenecek verinin byte dizisi formatında algoritmaya verilmesidir. Algoritmanın asıl uygulaması aşağıda yer alan kısımdır. Yani biz HMACSHA1 nesnesi üretirken şifreyi veriyoruz. ComputeHash metodu ile ise algoritmayı uyguluyoruz.
using (var hmacmSha1provider = new HMACSHA1(password))
{
var hash = hmacmSha1provider.ComputeHash(plainttext);
response.HashFunctionResult = BitConverter.ToString(hash).Replace("-", "");
}
Konu ile alakalı sorularınız olursa lütfen sormaktan çekinmeyin en kısa sürede yanıtlamaya çalışacağım.
HMACSHA1 hash algoritmalarının projelerde kullanılabilmesi için SHA1 algoritmasında olduğu gibi projeye System.Security.Cryptography isim uzayının eklenmesi gerekiyor. Bu ekleme işlemi haricinde HMACSHA1 algoritmasında bitler düzeyinde işlem yaptığı için ilk önce hash algoritması uygulanacak metnin byte dizisine dönüştürülmesi gerekiyor. Bu işlemden sonra elde ettiğiniz şifreli metin üzerinde de Replace işlemi yapacağız. Replace işleminin amacı ise şifreli metin sonucunda metin içerisindeki '-' karakterini atmaktır. Burada çok önemli bir nokta vardır ki HMACSHA1 algoritması algoritmayı uygularken byte dizisi üzerinde işlem yaptığı için her türlü elektronik veri bu algoritma kullanılarak hashlene bilir. Yani algoritma girdisi her zaman metin olamak zorunda değildir. Byte dizisine dönüştürdüğünüz her veri üzerinde bu işlemi yapabilirsiniz.
Algoritmanın C# programlama dili için tanıtımından önce biraz HMACSHA1 'den bahsetmek istiyorum. HMACSHA1 hash algoritmalarından bir tanesidir ve SHA1 algoritmasının simetrik halidir. (Hash algoritmaları ile ilgili detaylı bilgi almak isterseniz buradaki makaleye göz atabilirsiniz) Algoritma sonucunda 160 bit veya 40 hexadecimal şifreli metin üretilir. Hash algoritmasının mantığı gereği üretilen karakter uzunlukları her zaman 40 hexadecimal sayıdır.
C# programlama dilinde HMACSHA1 algoritmasının uygulanabilmesi için HMACSHA1 sınıfından yeni bir nesne üretmek ve bu sınıfın ComputeHash metodunu kullanmak gerekiyor. Bu uygulamanın yapıldığı örnek aşağıda yer almaktadır.
Bu anlatımlardan sonra artık C# programlama dilinde HMACSHA1 algoritmasının uygulamasına geçebiliriz. Bu uygulama için yazdığım kodlar aşağıdadır.
internal protected HashFunctionResponse ExecuteHMACSHA1Algorithm(HashFunctionRequest request)
{
var response = new HashFunctionResponse
{
Success = false,
Exception = null,
Message = EHashFunctionMessage.IntializeAlgoritm,
HashFunctionResult = null
};
try
{
var password = Encoding.UTF8.GetBytes(request.Password);
var plainttext = Encoding.UTF8.GetBytes(request.PlainText);
using (var hmacmSha1provider = new HMACSHA1(password))
{
var hash = hmacmSha1provider.ComputeHash(plainttext);
response.HashFunctionResult = BitConverter.ToString(hash).Replace("-", "");
}
response.Success = true;
response.Exception = null;
response.Message = EHashFunctionMessage.Success;
}
catch (InvalidOperationException invalidOperationException)
{
response.Success = false;
response.Exception = invalidOperationException;
response.Message = EHashFunctionMessage.InvalidOperationException;
response.HashFunctionResult = null;
}
catch (Exception exception)
{
response.Success = false;
response.Exception = exception;
response.Message = EHashFunctionMessage.UnexpectedException;
response.HashFunctionResult = null;
}
return response;
}
Algoritma için önemli olan nokta algoritmanın uygulanabilmesi için girdi olarak şifre ve şifrelenecek verinin byte dizisi formatında algoritmaya verilmesidir. Algoritmanın asıl uygulaması aşağıda yer alan kısımdır. Yani biz HMACSHA1 nesnesi üretirken şifreyi veriyoruz. ComputeHash metodu ile ise algoritmayı uyguluyoruz.
using (var hmacmSha1provider = new HMACSHA1(password))
{
var hash = hmacmSha1provider.ComputeHash(plainttext);
response.HashFunctionResult = BitConverter.ToString(hash).Replace("-", "");
}
Konu ile alakalı sorularınız olursa lütfen sormaktan çekinmeyin en kısa sürede yanıtlamaya çalışacağım.
Yorumlar
Yorum Gönder