ASP MD5 Şifreleme Algoritması
ASP MD5 Şifreleme Algoritması

MD5 Nedir ?
MD5 (Message-Digest algorithm 5) olarak adlandırılan ve 1991 yılındaRon Rivest tarafından gelişitirlen tek yönlü (kriptografik) 128 bit şifreleme metodudur. Aslında MD5 bir şifreleme yöntemi değil, bir hash fonksiyonudur. Girdinin boyutundan bağımsız olarak alfanumarik değerler üretir ve çok hassas bir duyarlılığı vardır. Girdimizdeki en ufak bir değişikikte MD5 çıktısı çok farklılık göstermektedir.Örneiğin:// kodaman.org ve Kodaman.org arasındaki MD5 çıktıları aynen şu şekilde olacaktır

49a36f6cb249b4d2bf46471d16fe1639 = kodaman.org769525211ef137dabad3e2d0814637c1 = Kodaman.org

örnekte görmüş olduğunuz gibi k harfindeki en ufak bir değişikliğin MD5 çıktısına etkisi çok farklıdır.MD5 bir girdi metni yada bir dosyayı alıp fazla uzun olmayan bir harf ve sayı dizisine çevirir. Bu harf ve sayı dizesi sonucu 128bit uzunluğundadır. 128bit ise 128/4 = 32 hexadecimal sayıyla ifade edilebilir.Ne Amaçla Kullanılır ?
MD5’in kullanım amacı bilgilerin şifrelenerek korunmasını sağlamak ve internetten indirdiğimiz dosyaların tam ve doğru olduğunu kontrol etmek olarak özetleyebiliriz.

Database güevliğinde MD5
Örneğin web siteniz üzerinde üyelerinize ait özel bilgilerileri ve şifrelerini MD5 ile şifrelerseniz veritabanınız bir başkasının eline geçse bile o kullanıcı hesabanı giriş yapıp işlem yapamazlar.

MD5 Check
MD5 Check

Dosyaların Kontrolünde MD5
Çoğumuz internetten download yaparken çoğu sitede download linklerinin yanında MD5 CHECKSUM e10adc3949ba59abbe56e057f20f883e gibi bir değer görmüşüzdür. İşte bu değer yazılımın orjinal MD5 şifreleme çıktısıdır , siz indirmiş olduğunuz dosyayı MD5 Checksum Verifier (MD5 Doğrulayıcı) ile test ederek indirdiğiniz yada elinizde olan sürümün orjinal dağıtımla aynı olup olmadığını karşılaştırabilirsiniz.

Kısıtlı kullanımlı bir MD5 Doğrulayıcı yazılımına şuradan ulaşabilirsiniz. Bu yazılımla kendi yazdığınız bir dosyanındında orjinal MD5 Hash değerini öğrenebilirsiniz.Özetle : MD5 128 bitlik bir Hash fonksiyonudur. İster bir kelime, ister 700 mb lık bir dosya olsun en sonunda 32 bitlik bir hexdecimal sayı ve karakterlerden oluşan (alfanumarik) bir ifadeye dönüşür.
ASP ile MD5 Fonksyonu Örneği
<%Private Const BITS_TO_A_BYTE = 8Private Const BYTES_TO_A_WORD = 4Private Const BITS_TO_A_WORD = 32Private m_lOnBits(30)Private m_l2Power(30)m_lOnBits(0) = CLng(1)m_lOnBits(1) = CLng(3)m_lOnBits(2) = CLng(7)m_lOnBits(3) = CLng(15)m_lOnBits(4) = CLng(31)m_lOnBits(5) = CLng(63)m_lOnBits(6) = CLng(127)m_lOnBits(7) = CLng(255)m_lOnBits(8) = CLng(511)m_lOnBits(9) = CLng(1023)m_lOnBits(10) = CLng(2047)m_lOnBits(11) = CLng(4095)m_lOnBits(12) = CLng(8191)m_lOnBits(13) = CLng(16383)m_lOnBits(14) = CLng(32767)m_lOnBits(15) = CLng(65535)m_lOnBits(16) = CLng(131071)m_lOnBits(17) = CLng(262143)m_lOnBits(18) = CLng(524287)m_lOnBits(19) = CLng(1048575)m_lOnBits(20) = CLng(2097151)m_lOnBits(21) = CLng(4194303)m_lOnBits(22) = CLng(8388607)m_lOnBits(23) = CLng(16777215)m_lOnBits(24) = CLng(33554431)m_lOnBits(25) = CLng(67108863)m_lOnBits(26) = CLng(134217727)m_lOnBits(27) = CLng(268435455)m_lOnBits(28) = CLng(536870911)m_lOnBits(29) = CLng(1073741823)m_lOnBits(30) = CLng(2147483647)m_l2Power(0) = CLng(1)m_l2Power(1) = CLng(2)m_l2Power(2) = CLng(4)m_l2Power(3) = CLng(8)m_l2Power(4) = CLng(16)m_l2Power(5) = CLng(32)m_l2Power(6) = CLng(64)m_l2Power(7) = CLng(128)m_l2Power(8) = CLng(256)m_l2Power(9) = CLng(512)m_l2Power(10) = CLng(1024)m_l2Power(11) = CLng(2048)m_l2Power(12) = CLng(4096)m_l2Power(13) = CLng(8192)m_l2Power(14) = CLng(16384)m_l2Power(15) = CLng(32768)m_l2Power(16) = CLng(65536)m_l2Power(17) = CLng(131072)m_l2Power(18) = CLng(262144)m_l2Power(19) = CLng(524288)m_l2Power(20) = CLng(1048576)m_l2Power(21) = CLng(2097152)m_l2Power(22) = CLng(4194304)m_l2Power(23) = CLng(8388608)m_l2Power(24) = CLng(16777216)m_l2Power(25) = CLng(33554432)m_l2Power(26) = CLng(67108864)m_l2Power(27) = CLng(134217728)m_l2Power(28) = CLng(268435456)m_l2Power(29) = CLng(536870912)m_l2Power(30) = CLng(1073741824)Private Function LShift(lValue, iShiftBits)If iShiftBits = 0 ThenLShift = lValueExit FunctionElseIf iShiftBits = 31 ThenIf lValue And 1 ThenLShift = &H80000000ElseLShift = 0End IfExit FunctionElseIf iShiftBits < 0 Or iShiftBits > 31 ThenErr.Raise 6End IfIf (lValue And m_l2Power(31 – iShiftBits)) ThenLShift = ((lValue And m_lOnBits(31 – (iShiftBits + 1))) * m_l2Power(iShiftBits)) Or &H80000000ElseLShift = ((lValue And m_lOnBits(31 – iShiftBits)) * m_l2Power(iShiftBits))End IfEnd FunctionPrivate Function RShift(lValue, iShiftBits)If iShiftBits = 0 ThenRShift = lValueExit FunctionElseIf iShiftBits = 31 ThenIf lValue And &H80000000 ThenRShift = 1ElseRShift = 0End IfExit FunctionElseIf iShiftBits < 0 Or iShiftBits > 31 ThenErr.Raise 6End IfRShift = (lValue And &H7FFFFFFE) m_l2Power(iShiftBits)If (lValue And &H80000000) ThenRShift = (RShift Or (&H40000000 m_l2Power(iShiftBits – 1)))End IfEnd FunctionPrivate Function RotateLeft(lValue, iShiftBits)RotateLeft = LShift(lValue, iShiftBits) Or RShift(lValue, (32 – iShiftBits))End FunctionPrivate Function AddUnsigned(lX, lY)Dim lX4Dim lY4Dim lX8Dim lY8Dim lResultlX8 = lX And &H80000000lY8 = lY And &H80000000lX4 = lX And &H40000000lY4 = lY And &H40000000lResult = (lX And &H3FFFFFFF) + (lY And &H3FFFFFFF)If lX4 And lY4 ThenlResult = lResult Xor &H80000000 Xor lX8 Xor lY8ElseIf lX4 Or lY4 ThenIf lResult And &H40000000 ThenlResult = lResult Xor &HC0000000 Xor lX8 Xor lY8ElselResult = lResult Xor &H40000000 Xor lX8 Xor lY8End IfElselResult = lResult Xor lX8 Xor lY8End IfAddUnsigned = lResultEnd FunctionPrivate Function F(x, y, z)F = (x And y) Or ((Not x) And z)End FunctionPrivate Function G(x, y, z)G = (x And z) Or (y And (Not z))End FunctionPrivate Function H(x, y, z)H = (x Xor y Xor z)End FunctionPrivate Function I(x, y, z)I = (y Xor (x Or (Not z)))End FunctionPrivate Sub FF(a, b, c, d, x, s, ac)a = AddUnsigned(a, AddUnsigned(AddUnsigned(F(b, c, d), x), ac))a = RotateLeft(a, s)a = AddUnsigned(a, b)End SubPrivate Sub GG(a, b, c, d, x, s, ac)a = AddUnsigned(a, AddUnsigned(AddUnsigned(G(b, c, d), x), ac))a = RotateLeft(a, s)a = AddUnsigned(a, b)End SubPrivate Sub HH(a, b, c, d, x, s, ac)a = AddUnsigned(a, AddUnsigned(AddUnsigned(H(b, c, d), x), ac))a = RotateLeft(a, s)a = AddUnsigned(a, b)End SubPrivate Sub II(a, b, c, d, x, s, ac)a = AddUnsigned(a, AddUnsigned(AddUnsigned(I(b, c, d), x), ac))a = RotateLeft(a, s)a = AddUnsigned(a, b)End SubPrivate Function ConvertToWordArray(sMessage)Dim lMessageLengthDim lNumberOfWordsDim lWordArray()Dim lBytePositionDim lByteCountDim lWordCountConst MODULUS_BITS = 512Const CONGRUENT_BITS = 448lMessageLength = Len(sMessage)lNumberOfWords = (((lMessageLength + ((MODULUS_BITS – CONGRUENT_BITS) BITS_TO_A_BYTE)) (MODULUS_BITS BITS_TO_A_BYTE)) + 1) * (MODULUS_BITS BITS_TO_A_WORD)ReDim lWordArray(lNumberOfWords – 1)lBytePosition = 0lByteCount = 0Do Until lByteCount >= lMessageLengthlWordCount = lByteCount BYTES_TO_A_WORDlBytePosition = (lByteCount Mod BYTES_TO_A_WORD) * BITS_TO_A_BYTElWordArray(lWordCount) = lWordArray(lWordCount) Or LShift(Asc(Mid(sMessage, lByteCount + 1, 1)), lBytePosition)lByteCount = lByteCount + 1LooplWordCount = lByteCount BYTES_TO_A_WORDlBytePosition = (lByteCount Mod BYTES_TO_A_WORD) * BITS_TO_A_BYTElWordArray(lWordCount) = lWordArray(lWordCount) Or LShift(&H80, lBytePosition)lWordArray(lNumberOfWords – 2) = LShift(lMessageLength, 3)lWordArray(lNumberOfWords – 1) = RShift(lMessageLength, 29)ConvertToWordArray = lWordArrayEnd FunctionPrivate Function WordToHex(lValue)Dim lByteDim lCountFor lCount = 0 To 3lByte = RShift(lValue, lCount * BITS_TO_A_BYTE) And m_lOnBits(BITS_TO_A_BYTE – 1)WordToHex = WordToHex & Right(“0” & Hex(lByte), 2)NextEnd FunctionPublic Function MD5(sMessage)Dim xDim kDim AADim BBDim CCDim DDDim aDim bDim cDim dConst S11 = 7Const S12 = 12Const S13 = 17Const S14 = 22Const S21 = 5Const S22 = 9Const S23 = 14Const S24 = 20Const S31 = 4Const S32 = 11Const S33 = 16Const S34 = 23Const S41 = 6Const S42 = 10Const S43 = 15Const S44 = 21x = ConvertToWordArray(sMessage)a = &H67452301b = &HEFCDAB89c = &H98BADCFEd = &H10325476For k = 0 To UBound(x) Step 16AA = aBB = bCC = cDD = dFF a, b, c, d, x(k + 0), S11, &HD76AA478FF d, a, b, c, x(k + 1), S12, &HE8C7B756FF c, d, a, b, x(k + 2), S13, &H242070DBFF b, c, d, a, x(k + 3), S14, &HC1BDCEEEFF a, b, c, d, x(k + 4), S11, &HF57C0FAFFF d, a, b, c, x(k + 5), S12, &H4787C62AFF c, d, a, b, x(k + 6), S13, &HA8304613FF b, c, d, a, x(k + 7), S14, &HFD469501FF a, b, c, d, x(k + 8), S11, &H698098D8FF d, a, b, c, x(k + 9), S12, &H8B44F7AFFF c, d, a, b, x(k + 10), S13, &HFFFF5BB1FF b, c, d, a, x(k + 11), S14, &H895CD7BEFF a, b, c, d, x(k + 12), S11, &H6B901122FF d, a, b, c, x(k + 13), S12, &HFD987193FF c, d, a, b, x(k + 14), S13, &HA679438EFF b, c, d, a, x(k + 15), S14, &H49B40821GG a, b, c, d, x(k + 1), S21, &HF61E2562GG d, a, b, c, x(k + 6), S22, &HC040B340GG c, d, a, b, x(k + 11), S23, &H265E5A51GG b, c, d, a, x(k + 0), S24, &HE9B6C7AAGG a, b, c, d, x(k + 5), S21, &HD62F105DGG d, a, b, c, x(k + 10), S22, &H2441453GG c, d, a, b, x(k + 15), S23, &HD8A1E681GG b, c, d, a, x(k + 4), S24, &HE7D3FBC8GG a, b, c, d, x(k + 9), S21, &H21E1CDE6GG d, a, b, c, x(k + 14), S22, &HC33707D6GG c, d, a, b, x(k + 3), S23, &HF4D50D87GG b, c, d, a, x(k + 8), S24, &H455A14EDGG a, b, c, d, x(k + 13), S21, &HA9E3E905GG d, a, b, c, x(k + 2), S22, &HFCEFA3F8GG c, d, a, b, x(k + 7), S23, &H676F02D9GG b, c, d, a, x(k + 12), S24, &H8D2A4C8AHH a, b, c, d, x(k + 5), S31, &HFFFA3942HH d, a, b, c, x(k + 8), S32, &H8771F681HH c, d, a, b, x(k + 11), S33, &H6D9D6122HH b, c, d, a, x(k + 14), S34, &HFDE5380CHH a, b, c, d, x(k + 1), S31, &HA4BEEA44HH d, a, b, c, x(k + 4), S32, &H4BDECFA9HH c, d, a, b, x(k + 7), S33, &HF6BB4B60HH b, c, d, a, x(k + 10), S34, &HBEBFBC70HH a, b, c, d, x(k + 13), S31, &H289B7EC6HH d, a, b, c, x(k + 0), S32, &HEAA127FAHH c, d, a, b, x(k + 3), S33, &HD4EF3085HH b, c, d, a, x(k + 6), S34, &H4881D05HH a, b, c, d, x(k + 9), S31, &HD9D4D039HH d, a, b, c, x(k + 12), S32, &HE6DB99E5HH c, d, a, b, x(k + 15), S33, &H1FA27CF8HH b, c, d, a, x(k + 2), S34, &HC4AC5665II a, b, c, d, x(k + 0), S41, &HF4292244II d, a, b, c, x(k + 7), S42, &H432AFF97II c, d, a, b, x(k + 14), S43, &HAB9423A7II b, c, d, a, x(k + 5), S44, &HFC93A039II a, b, c, d, x(k + 12), S41, &H655B59C3II d, a, b, c, x(k + 3), S42, &H8F0CCC92II c, d, a, b, x(k + 10), S43, &HFFEFF47DII b, c, d, a, x(k + 1), S44, &H85845DD1II a, b, c, d, x(k + 8), S41, &H6FA87E4FII d, a, b, c, x(k + 15), S42, &HFE2CE6E0II c, d, a, b, x(k + 6), S43, &HA3014314II b, c, d, a, x(k + 13), S44, &H4E0811A1II a, b, c, d, x(k + 4), S41, &HF7537E82II d, a, b, c, x(k + 11), S42, &HBD3AF235II c, d, a, b, x(k + 2), S43, &H2AD7D2BBII b, c, d, a, x(k + 9), S44, &HEB86D391a = AddUnsigned(a, AA)b = AddUnsigned(b, BB)c = AddUnsigned(c, CC)d = AddUnsigned(d, DD)NextMD5 = LCase(WordToHex(a) & WordToHex(b) & WordToHex(c) & WordToHex(d))End FunctionResponse.Write(MD5(“Kodaman.org”))%>
Yukarıdaki fonksiyonun kullanımı gayet basittir en alt satırda görmüş olduğunuz Response.Write(MD5(“Kodaman.org”)) Bize Kodaman.org a ait MD5 karşılığını verir. Üye kayıt işlemi yaparken üyeye ait şifreyi MD5 fonksiyonu ile çevirdikten sonra database’inize kaydederseniz şifre MD5 ile güvende olacaktır. Unutmadan hemen hatırlatalım üye giriş kontrol sayfanızda formdan aldığınız şifre verisini database’te sorgulamadan önce yine MD5 fonksiyonu kullanarak MD5 şeklinde SQL’e sorgunuzu gönderiniz.
PHP için MD5 Şifreleme Örnek Kodu
Örnek Uygulamaya @Redingot un yadığı makaleden erişebilirsiniz : http://arsiv.pilli.com/yazi/php-de-guvenlik-ve-oturumKaynaklar : Özgür Ansiklopedi Vikipedi , Cefiz.Net