21 Ocak 2013 Pazartesi

MD5(Message Digest)


MD5(Message Digest)

Bu makalemizde MD5(Message Digest) hash algoritmasını inceleyeceğiz.

MIT’de profesör olan Ron Rivest tarafından MD4’ün geliştirilmiş bir versiyonu olarak sunulan MD5(Message Digest), basit anlamda bir hash fonksiyonudur. 1993 yılında Bert den Boer ve Antoon Bosselaers MD5’in iki farklı değeri için aynı değeri üreten örnekler bulmuşlardır. Bu yüzden MD5’e olan güven oldukça sarsılmıştır. 2004 yılında MD5CRK adında dağıtık bir proje ile MD5’in zayıf yönleri gösterilmiştir.

MD5 genellikle ücretsiz olarak dağıtılan yazılımlarda bilgilerinin doğruluğunu test etmek için kullanılır. MD5’in bu şekilde kullanıldığı durumlarda MD5Sum olarak da adlandırılmaktadır. Örneğin, İnternet üzerinden indirdiğiniz bir dosyanın bozulmadan kullanıcıya ulaştığını tesbit edebilmek için kullanılır.

Microsoft .NET Framework’ te MD5, kendisi gibi soyut bir sınıf olan HashAlgoritm sınıfından türeyen MD5 sınıfı ile tanımlanmıştır. MD5CryptoServiceProvider MD5 algoritmasını gerçekleyen sınıftır. Microsoft .NET Framework’ te, MD5 algoritması için hash boyutu 128 bittir.

MD5CryptoServiceProvider sınıfı MD5 soyut sınıfından türemektedir. MD5 soyut sınıfının erişilebilir özellikleri şu şekilde tanımlanır:
  • CanReuseTransform, şu an ki dönüşüm tekrar kullanılıp kullanılmayacağını belirtir,varsayılan değeri true’dur.
  • CanTransformMultipleBlocks, aynı anda bir çok veri bloğunun dönüştürülüp dönüştürülemeyeceğini belirtir, varsayılan değeri true’dur.
  • Hash, hesaplanan hash değerini verir.
  • HashSize, hesaplanan hash değerinin bit olarak büyüklüğünü gösterir. Varsayılan değeri 128 bittir.
  • InputBlockSize, kullanılan veri bloğunun bit olarak büyüklüğünü gösterir. Varsayılan değeri 1 bittir.
  • OutputBlockSize, algoritma sonunda oluşacak veri bloğunun bit olarak büyüklüğünü gösterir. Varsayılan değeri 1 bittir.
Bu sınıfın erişilebilir metotları ise şunlardır:
  • Clear, MD5 algoritması tarafından kullanılan kaynakları sisteme geri verir.
  • ComputeHash, kullanılan veri bloğu için hash değerini hesaplar.
  • Create, MD5 algoritmasını gerçekleştirecek bir nesne oluşturur.
  • Equals, iki nesnenin birbirine eşit olup olmadığını test eder.
  • GetHashCode, bellekteki o nesneye özgü bir hash kodu oluşturur.
  • GetType, bu nesnenin tipini verir.
  • Initialize, MD5 nesnesinin ilk değerlerini ayarlar.
  • ToString, şu an ki nesneyi ifade eden bir metin oluşturur.
  • TransformBlock, belirtilen veri bloğundaki belirtilen alan için hash değerini hesaplar ve belirtilen sonuç veri bloğunun belirtilen alanına hesaplanan bu hash değerini kopyalar.
  • TransformFinalBlock, belirtilen byte dizisindeki belirtilen alan için hash değerini hesaplar.

MD5CryptoServiceProvider, MD5 sınıfından türer ve MD5 algoritmasının gerçeklemektedir. MD5CryptoServiceProvider mühürlü bir sınıftır. Mühürlü sınıf, hiç bir sınıfın kendisinden türetilemeyeceğini ifade eder. Bu sınıfın erişebilir özellikleri şunlardır:
  • CanReuseTransform, şu an ki dönüşüm tekrar kullanılıp kullanılmayacağını belirtir,varsayılan değeri true’dur.
  • CanTransformMultipleBlocks, aynı anda bir çok veri bloğunun dönüştürülüp dönüştürülemeyeceğini belirtir, varsayılan değeri true’dur.
  • Hash, hesaplanan hash değerini verir.
  • HashSize, hesaplanan hash değerinin bit olarak büyüklüğünü gösterir. Varsayılan değeri 128 bittir.
  • InputBlockSize, kullanılan veri bloğunun bit olarak büyüklüğünü gösterir. Varsayılan değeri 1 bittir.
  • OutputBlockSize, algoritma sonunda oluşacak veri bloğunun bit olarak büyüklüğünü gösterir. Varsayılan değeri 1 bittir.
Bu sınıfın erişilebilir metotları ise şunlardır:
  • Clear, MD5 algoritması tarafından kullanılan kaynakları sisteme geri verir.
  • ComputeHash, kullanılan veri bloğu için hash değerini hesaplar.
  • Create, MD5 algoritmasını gerçekleştirecek bir nesne oluşturur.
  • Equals, iki nesnenin birbirine eşit olup olmadığını test eder.
  • GetHashCode, bellekteki o nesneye özgü bir hash kodu oluşturur.
  • GetType, bu nesnenin tipini verir.
  • Initialize, MD5 nesnesinin ilk değerlerini ayarlar.
  • ToString, şu an ki nesneyi ifade eden bir metin oluşturur.
  • TransformBlock, belirtilen veri bloğundaki belirtilen alan için hash değerini hesaplar ve belirtilen sonuç veri bloğunun belirtilen alanına hesaplanan bu hash değerini kopyalar.
  • TransformFinalBlock, belirtilen byte dizisindeki belirtilen alan için hash değerini hesaplar.
C#

using System;
using System.Text;
using System.Security.Cryptography;
 
namespace TestConsoleApplication
{
    public  class TestUygulaması
    {
        static void Main()
        {
            string stringData = "MD5 de SHA gibi bir hash

algoritmasıdır. Tüm hash algoritmalarında küçük değişiklikler 

çok büyük ve kestirilemez değişikliklere yol açar !!";
            MD5CryptoServiceProvider md5= new MD5CryptoServiceProvider();
            md5.Initialize();
            Console.WriteLine( Encoding.UTF8.GetString( 
                md5.ComputeHash(Encoding.UTF8.GetBytes(stringData)) ) );
            stringData ="Md5 de SHA gibi bir hash algoritmasıdır. 

Tüm hash algoritmalarında küçük değişiklikler çok büyük ve 

 kestirilemez değişikliklere yol açar !!";
            Console.WriteLine( Encoding.UTF8.GetString( 
                md5.ComputeHash(Encoding.UTF8.GetBytes(stringData)) ) );
            Console.Read();
        }
    }
}
 
VB.NET

Imports System
Imports System.Text
Imports System.Security.Cryptography
 
Module TestConsoleApplication
    Sub Main()
        Dim stringData As String = "MD5 de SHA gibi bir hash 

algoritmasıdır. Tüm hash algoritmalarında küçük değişiklikler 

çok büyük ve kestirilemez değişikliklere yol açar !!"
        Dim md5 As New MD5CryptoServiceProvider
        md5.Initialize()
        Console.WriteLine(Encoding.UTF8.GetString( _
        md5.ComputeHash(Encoding.UTF8.GetBytes(stringData))))
        stringData = "Md5 de SHA gibi bir hash algoritmasıdır. 

Tüm hash algoritmalarında küçük değişiklikler çok büyük ve 

 kestirilemez değişikliklere yol açar !!"
        Console.WriteLine(Encoding.UTF8.GetString( _
        md5.ComputeHash(Encoding.UTF8.GetBytes(stringData))))
        Console.Read()
    End Sub
End Module
 
C++.NET

#include "stdafx.h"
 
#using <mscorlib.dll>
 
using namespace System;
using namespace System::Text;
using namespace System::Security::Cryptography;
 
int _tmain()
{
    String __gc* stringData = S"MD5 de SHA gibi bir hash 

algoritmasıdır. Tüm hash algoritmalarında küçük değişiklikler çok büyük ve 

kestirilemez değişikliklere yol açar !!";
    MD5CryptoServiceProvider __gc* md5= __gc new MD5CryptoServiceProvider();
    md5->Initialize();
    Console::WriteLine( Encoding::UTF8->GetString( 
        md5->ComputeHash( Encoding::UTF8->GetBytes(stringData))));
    stringData = S"Md5 de SHA gibi bir hash algoritmasıdır. 

Tüm hash algoritmalarında küçük değişiklikler çok büyük ve 

 kestirilemez değişikliklere yol açar !!";
    Console::WriteLine( Encoding::UTF8->GetString( 
        md5->ComputeHash( Encoding::UTF8->GetBytes(stringData))));
    Console::Read();
         return 0;
}
J#
package TestConsoleApplication;
 
import System.*;
import System.Text.*;
import System.Security.Cryptography.*;
 
public class TestUygulaması
{
    public TestUygulaması()
    {
    }
 
    /** @attribute System.STAThread() */
    public static void main(String[] args)
    {
        String stringData = "MD5 de SHA gibi bir hash algoritmasıdır. 

Tüm hash algoritmalarında küçük değişiklikler çok büyük ve 

kestirilemez değişikliklere yol açar !!";
        MD5CryptoServiceProvider md5 = new MD5CryptoServiceProvider();
        md5.Initialize();
        Console.WriteLine( Encoding.get_UTF8().GetString(
            md5.ComputeHash( Encoding.get_UTF8().GetBytes(stringData) ) ) );
        stringData = "Md5 de SHA gibi bir hash algoritmasıdır. 

Tüm hash algoritmalarında küçük değişiklikler çok büyük ve 

 kestirilemez değişikliklere yol açar !!";
        Console.WriteLine( Encoding.get_UTF8().GetString(
            md5.ComputeHash( Encoding.get_UTF8().GetBytes(stringData) ) ) );
        Console.Read();
    }
}

Hiç yorum yok:

Yorum Gönder

isterseniz anonim seçeneginden kayıtsız gönderebilirsiniz iyi günler