C# / VB.NET – MD5 fonksiyonu(String To MD5)

MD5(Message Digest algorithm 5), MIT’de profesör olan Ron Rivest tarafından selefi olan MD4 üzerine geliştirilmiş hash algoritmasına dayalı bir fonksiyondur. 128 bit’lik çıktı üreten ve tek yönlü bir şifreleme sistemi olan(ki bu yüzden kırılması mümkün değildir) MD5 fonskiyonu, transfer edilmiş bilgilerin doğru, eksiksiz bir şekilde yerine ulaşıp ulaşmadığının kontrol edilmesinde ve public-key şifrelemesinde kullanılır. Matematiksel bir model üzerine kurulan MD5’in kırılmamazlığı, input olarak aldığı değerin uzunluğuyla orantılır. Özellikle database işlemlerinde kullanıcılara ait bazı özel bilgilerin MD5 ile şifrelenecek tutulması tavsiye edilir. Bu veriler kötü niyetli kişiler tarafından çalınsa bile geri döndürülemediği için ciddi bir tehlike oluşturmaz. Bazı sitelerde şifremizi unuttuğumuzda bize unuttuğumuz şifremiz değil yeni şifre gönderilir. Bu sitelerde şifreler, clear text(düz metin) olarak tutulmadığı için site yöneticisi de şifremizi göremez. Bu durumda şifremizi resetlemesinden başka seçenek bulunmamaktadır. Var olan şifreyi siler yeni bir kelime üretip o kelimenin MD5 değerini veritabanına atar ve bize de bu yeni kelimeyi şifre olarak gönderir.
Uygulamalarımızda string değerleri MD5 formatında şifreleyecek bir fonksiyona her zaman ihtiyacımız olabilir. Bu yazıda C# ve VB.NET dillerinde bu minik fonksiyonu bulabilirsiniz. .NET Framework’te MD5, SHA1, RSA algoritmaları ve diğer şifreleme işlemleri için System.Security.Cryptography kütüphanesi sunulur. Bir string değeri MD5’ten geçirmek için MD5 sınıfının byte türünde parametre alan ComputeHash() metodu kullanılır.
using System.Text;
using System.Security.Cryptography;
. . .

string ConvertStringToMD5(string ClearText)
{
byte[] ByteData = Encoding.ASCII.GetBytes(ClearText);
//MD5 nesnesi oluşturalım.
MD5 oMd5 = MD5.Create();
//Hash değerini hesaplayalım.
byte[] HashData = oMd5.ComputeHash(ByteData);

//byte dizisini hex formatına çevirelim
StringBuilder oSb = new StringBuilder();
for (int x = 0; x
Function ConvertStringToMD5(ByVal ClearText As String) As String
Dim ByteData As Byte() = Encoding.ASCII.GetBytes(ClearText)
‘MD5 nesnesi oluşturalım.
Dim oMd5 As MD5 = MD5.Create()
‘Hash değerini hesaplayalım.
Dim HashData As Byte() = oMd5.ComputeHash(ByteData)

‘byte dizisini hex formatına çevirelim
Dim oSb As StringBuilder = New StringBuilder()
Dim x As Integer = 0
Do While x

C# / VB.NET – MD5 fonksiyonu(String To MD5)” üzerine 15 düşünce

  1. Ahmet Kaymaz Yazar

    Sayın Aydın,eğer MD5’ten geri dönmeyi kastediyorsan bu mümkün değil en azından şimdilik :) . MD5, Hash algoritmasının bir örneği olup tek yönlü şifreleme yapar yani MD5 fonksiyonunda geçmiş değeri geri okuyamazsın. En basit şekliyle düşünelim örneğin “AB” şeklinde bir string değerimizin olduğunu ve toplama yöntemiyle bunu şifreleyen bir hash fonksiyonu olduğunu düşünelim. “AB”= 65+66 = 131. Bu yeni değerden asıl değere ulaşmak için güçlü makinelerle birçok ihtimali değerlendirmek gerekir. Eğer gerektiğinde asıl değerini de okuyayım diyorsan System.Convert.ToBase64String() metodunu kullanabilirsin.

    Cevapla
  2. Önsel AYDIN

    İlginiz için çok teşekkür öncelikle. Şimdi ben sqlde bir alanımı sizin fonksiyonunuzla şifrelettirip kaydettim. DB8AC1C259EB89D4A131B253BACFCA5F319D5F2 gibi.Diyelim 1234 asıl stringim. Bunu dbden okurken biyerde 1234 gibi göstermem gerekiyor.Yani db den select ile çekerken şifreli hali değilde asıl hali görünmeli gibi bir method lazım asıl bana.

    Cevapla
  3. Kenan DOGAN

    Hocam merhaba,
    md5 in algoritmasını açık bir dille anlatan kaynak belirtmeniz mümkünmü?
    teşekkürler.

    Cevapla
  4. Kenan DOGAN

    Hocam ,
    Rivest’in makalesini inceliyorum zaten,
    ama biraz karışık.
    oncelikle hash yapacagımız yazıyı binary formata döndürmemiz gerkiyormu?
    append nasıl oluyor.mesela 1000 bit olunca?
    mesajı 32 lik bitleremi ayıracaz?
    word A,B,C ve D ne oluyor?
    F,G,H,I fonksiyonlarına giren X,Y,Z ne oluyor.
    XvY nasıl oluyor?
    [abcd k s i] nasıl bir fonksiyon..hocam md5 in nasıl işledigini anlayamadım.
    kısa bir metin üstünde açıklarsanız süper oalcak.
    ***@***.com a yazarsanız daha super olacak.
    kolay gelsin,
    Saygılar,
    Kenan DOGAN

    Cevapla
  5. Ahmet Kaymaz Yazar

    Sanırım daha akademik bir çalışmaya ihtiyacınız var.
    MD5 en basit haliyle uzunluğu ne olursa olsun parametre olarak aldığı girdiyi 128 bit uzunluğunda bir değer dönüştürür. MD5 girdiyi, 512 bitlik bloklara bölerek işlem yapar. Eğer girdi 512’ye tam bölünemiyorsa ona göre sizin de bahsettiğiniz padding yani bit ekleme işlemi yapılır. A,B,C,D bu hash fonksiyonun başlangıç registerleridir. Her biri 32 bit olan bu değişkenler(state variables) 512 bitlik blokların işleme girmesi sonucu değer alırlar ve sonuçta yan yana konularak 4*32=128 bitlik bir çıktı elde edilir. F,G,H,I ise fonksiyon içerisindeki yardımcı fonksiyonlar (auxiliary functions) olarak düşünebilir. Bu fonksiyonlar her biri 32 bitlik olan 3 ifadeyi parametre olarak ve sonuçta bu ifadeleri mantıksal operatörlerden(and, or, not ve xor ) geçirir. Bu fonksiyonlar FF,GG,HH,II metodları tarafından çağrılır. Buradaki X, Y, Z başlangıç registerleri tarafından gönderilmiş bitleri temsil ediyor.
    Bu 4 step, her 512 bitlik blok için 16 kez çağrılır ve sonuçta her blok için 4*16=64 işlem yapılmış olur. Bu işlemde bitlerin kaydırılması sözkonusudur.
    FF[ABCD 0 7 1] FF[DABC 1 12 2] FF[CDAB 2 17 3] FF[BCDA 3 22 4]
    FF[ABCD 4 7 5] FF[DABC 5 12 6] FF[CDAB 6 17 7] FF[BCDA 7 22 8]
    FF[ABCD 8 7 9] FF[DABC 9 12 10] FF[CDAB 10 17 11]
    FF[BCDA 11 22 12]
    FF[ABCD 12 7 13] FF[DABC 13 12 14] FF[CDAB 14 17 15]
    FF[BCDA 15 22 16] Bu konuda ben de çok deneyimli değilim. Bu bilgilerle birlikte bir literatör taraması yapmanız daha doğru olacaktır. Bunun için de en uygun doküman http://www.faqs.org/rfcs/rfc1321.html adresidir olmazsa doğrudan bu algoritmayı çıkarmış kişiye mail atmanızdır: rivest@theory.lcs.mit.edu

    Cevapla
  6. chtsmt

    ya bu md5 is not declare ditor nerden tanımlıcaz anlayamadım lütfen yardım edbilirmisiniz

    Cevapla
  7. Ahmet Kaymaz Yazar

    Kodunuzu göremediğim için birşey diyemeyeceğim ama
    MD5 sınıfı System.Security.Cryptography isim-uzayı altında bulunmaktadır. Bu isim-uzayını using veya imports projeye eklememiş olabilir misiniz.

    Cevapla
  8. çetin

    oSb.Append(HashData[x].ToString(“x2¨));hocam burada neden x2 eklemesi yapıyoruz. eklesek ne olur eklemesek ne olur.

    Cevapla
  9. Ferhat Özkanun

    tebrik ederim. bu kadar iyi ve özverili yardımcı olunur. hakkınızı helal edin. emeğinize sağlık.

    Cevapla

Bir cevap yazın

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

Time limit is exhausted. Please reload CAPTCHA.