HELLO, I’M SERHAT AND THIS IS MY FANCY TITLE.

MySQL veri şifreleme fonksiyonları

MySQL temel olarak 5 tane hazır şifreleme fonksiyonu ile gelir. Bunlar password(), encrypt(), md5, aes_encrypt() ve sha1()'dir. Sahi birde sha() vardı ne oldu ona? Birazdan buna da değineceğim.

MySQL konsolunu açarak hemen bir kaç deneme yapabiliriz:

mysql> SELECT SHA1("serhat");
+------------------------------------------+
| SHA1("serhat")                           |
+------------------------------------------+
| de30e5ef68d3ea5e7eb1de8d922e499cd6bc775e |
+------------------------------------------+
1 row in set (0.00 sec)
mysql> SELECT MD5("serhat");
+----------------------------------+
| MD5("serhat")                    |
+----------------------------------+
| 4aa6d74604cad605ccb43b94aa5a7b94 |
+----------------------------------+
1 row in set (0.00 sec)
mysql> SELECT ENCRYPT("serhat");
+-------------------+
| ENCRYPT("serhat") |
+-------------------+
| NULL              |
+-------------------+
1 row in set (0.00 sec)
mysql> SELECT PASSWORD("serhat");
+-------------------------------------------+
| PASSWORD("serhat")                        |
+-------------------------------------------+
| *7B8566BBEC5FD8336D43CDDB7DD13EB891F43CA2 |
+-------------------------------------------+
1 row in set (0.00 sec)

Hepsi tamam da, Encrypt fonksiyonu neden "NULL" döndürdü? Çünkü bu fonksiyon yalnızca Unix üzerinde çalışmaktadır, eğer benim gibi Windows bir makinede denerseniz devamlı NULL sonucu döndürür. Peki bu neden önemli? Eğer web uygulamaları üzerinde bu fonksiyonlardan faydalanacaksanız, windows bir sunucu üzerinde bu fonksiyonu çalıştıramazsınız anlamına gelir.

Diğer bir önemli nokta ise Encrypt() fonksiyonunun iki karakterden daha kısa string ifadeler için işlem yapmaması. Böyle bir şey denerseniz yine NULL döndürecektir.

Şimdi birde başta hatırladığım SHA'ya bakalım, hatta SHA1 ile karşılaştıralım:

mysql> SELECT SHA1("serhat");
+------------------------------------------+
| SHA1("serhat")                           |
+------------------------------------------+
| de30e5ef68d3ea5e7eb1de8d922e499cd6bc775e |
+------------------------------------------+
1 row in set (0.00 sec)
mysql> SELECT SHA("serhat");
+------------------------------------------+
| SHA("serhat")                            |
+------------------------------------------+
| de30e5ef68d3ea5e7eb1de8d922e499cd6bc775e |
+------------------------------------------+
1 row in set (0.00 sec)

Dikkatlice karşılaştırırsanız her iki hash'in de aynı olduğunu görebilirsiniz. Çünkü uzun bir süredir SHA artık SHA1 olarak anılıyor. Aslında durum tam olarak böyle değil, fakat şimdilik lafı uzatmayacağım.

Şimdi bir tablo oluşturalım ve içerisine MD5 ile şifrelenmiş bir veriyi gönderelim:

mysql> create table user_md5 (user_name VARCHAR(16), password VARCHAR(32));
mysql> INSERT INTO user_md5 VALUES ('member1',MD5('secretpassword') );
mysql> INSERT INTO clientinfo.serhat VALUES("12345678", MD5("serhat"));
Query OK, 1 row affected (0.01 sec)

Şimdi ise test edelim:

mysql> select * from clientinfo.serhat where ogrencino="12345678" AND sifre=MD5("serhat");
+-----------+----------------------------------+
| ogrencino | sifre                            |
+-----------+----------------------------------+
|  12345678 | 4aa6d74604cad605ccb43b94aa5a7b94 |
+-----------+----------------------------------+
1 row in set (0.00 sec)

Gördüğünüz gibi hash olarak sonucumuzu görüntüledik. Diğer fonksiyonları da kendiniz deneyebilirsiniz, aynı adımlar ile işlemekteler.

Şimdi clientinfo isimli veritabanımın varolan üç adet tablosunu MD5 ile şifreleyeceğim:

mysql> UPDATE clientinfo.ikibindokuz
-> SET passwd = md5(passwd);
Query OK, 3943 rows affected, 3943 warnings (0.10 sec)
Rows matched: 3943  Changed: 3943  Warnings: 3943
mysql> UPDATE clientinfo.ikibinon
-> SET passwd = md5(passwd);
Query OK, 3032 rows affected, 3032 warnings (0.13 sec)
Rows matched: 3032  Changed: 3032  Warnings: 3032
mysql> UPDATE clientinfo.ikibinonbir
-> SET passwd = md5(passwd);
Query OK, 733 rows affected, 733 warnings (0.04 sec)
Rows matched: 733  Changed: 733  Warnings: 733

Şimdilik bu kadar. Başarılar.


Share this post!


Blog Comments powered by Disqus.