Merhabalar, bir projem için yazdığım örnek lisans sistemini sizede paylaşmak istiyorum. Her adımını anlatarak yapmaya çalıştım. Umarım yardımcı olurum.
İlk olarak algoritmemızı kurmalıyız. Öyle bir şifre vermeliyiz ki Bill Gates gelse kıramasın. Bu yüzden SHA1 ve MD5 şifreleme yöntemlerini kullanacağız.
Şöyle bir şifre işimizi görür herhalde:
$site_hash = sha1(sha1(md5($site. 'karistir')). 'karistir2');
Bunun çıktısı r10.net için şöyle olacaktır:
71642520b5e75e1d16827cc02bff6c0f58352ba8
Ancak bu çok uzun ve prof. durmayan bir şifre oldu. En iyisi bunu biraz janjanlı poşetlere koyalım:
// Şifremizi aldık
$site_hash = sha1(sha1(md5($site. 'karistir')). 'karistir2');
// Şifrenin baştan ilk 25 karakterini aldık (Microsoft tarzı :))
$site_hash = substr($site_hash, 0, 25);
// Şifrenin 5 karakterden sonrasına - ekledik (Yine Microsoft tarzı :P)
$site_hash = wordwrap($site_hash, 5, '-', true);
// Şifreynin tüm harflerini büyüttük.
echo mb_strtoupper($site_hash);
Kodumuzun hali ise böyle oldu:
71642-520B5-E75E1-D1682-7CC02
Böyle çok daha prof. durdu, değil mi?
Şimdii. Algoritmemız hazır olduğuna göre yukarıdaki şifreyi verebilecek bir form yapalım ki müşterilerimize daha hızlı hizmet verebilelim:
<?php
if (isset($_GET['site']))
{
$site = htmlspecialchars($_GET['site'], ENT_QUOTES);
$site_hash = sha1(sha1(md5($site. 'karistir')). 'karistir2');
$site_hash = substr($site_hash, 0, 25);
$site_hash = wordwrap($site_hash, 5, '-', true);
echo '<textarea cols="35">' . mb_strtoupper($site_hash) . '</textarea>';
}
echo '
<form action="" method="get">
Site adresi: <input type="text" value="" name="site" />
<input type="submit" value="Şifreyi Ver" />
</form>';
?>Formumuzda hazır. Bunu uygun bir yere atmalıyız ki her an şifre alabilelim...
Evet. Algoritma hazır, şifre verici form hazır. Heh, bunu scripte entegre etmek gerek...
Şimdi kendimize bir forum yazacağız. Bu fonksiyon içine alacağı yukarıdaki lisans şifresini (71642-520B5-E75E1-D1682-7CC02) eşitleme yapacak.
Bu fonksiyon için direk kod veriyorum. Üzerinde açıklama satırları mevcut:
function license_control($license_code)
{
// Ben yazdığım scriptlerde sript urlsini almak için bunun gibi bir değişken kullanırım. Değişken içeriği örneğin şöyledir:
// $scripturl = 'http://localhost.com/grafitus/';
global $scripturl;
// Şimdi site adresini alağıcağız. Ancak işimizi şans bırakmamak amacıyla burada kendimizi biraz kasacağız.
// $_SERVER['SERVER_NAME'] bazenleri boş dönebiliyor. Bunu kontrol ediyoruz. Boş ise bir sonraki $_SERVER['HTTP_HOST']'a bakıyoruz.
if (!empty($_SERVER['SERVER_NAME']))
$site = $_SERVER['SERVER_NAME'];
// $_SERVER['HTTP_HOST']'de bazen boş dönebilir. İşimizi şansa bırakmak olmaz. Bu nedenle bir sonraki else'ye geçiyoruz. $scripturl'nin içinden http://www. sız site adresini alıyoruz.
elseif (!empty($_SERVER['HTTP_HOST']))
$site = $_SERVER['HTTP_HOST'];
// Burası biraz daha karmaşık kısaca $scripturl içinden http://www. kısmı dışını alıyor.
else
$site = preg_match('~(http|ftp)[s]?:\/\/[w\.]*([a-zA-Z0-9\.]+)\/~i', $scripturl, $match) ? $match[2] : '';
// Yukarıda yaptığımız tüm işlemlere rağmen bir site adresi elde edemediysek, müşteriyi kasmaya gerek yok. Lisans işlemini devre dışı bırakıyoruz. null olarak döndürüyoruz fonksiyonu.
if (empty($site))
return;
// Nuraya geçebildiysek site adresini almışız. Ama ki site adresinin başında yine www. varsa siliyoruz...
if (strpos($site, 'www.') !== false)
$site = substr($site, 4);
// Burada algoritmamızı kullanarak site adresinizi şifreliyor. Tekrar aynı lisans şifresini almaya çalışıyoruz.
$site_hash = sha1(sha1(md5($site. 'karistir')). 'karistir2');
$site_hash = substr($site_hash, 0, 25);
$site_hash = wordwrap($site_hash, 5, '-', true);
$site_hash = mb_strtoupper($site_hash);
// Evettt. Can alıcı nokta. 2-5 satır üstteki aldığım şifre ile müşteriye verdiğimiz lisans kodunu eşşeltirmeye/denkleştirmeye çalışıyor. Eğerki eşleşmez veya denkleşmez ise vay onun haline: scripti öldüyoruz!
if ($site_hash != $license_code || $site_hash !== $license_code)
die ('Lütfen geçerli lisans kodu girin!' . $site);
}
license_control('71642-520B5-E75E1-D1682-7CC02');Bu fonksiyonu scriptinizde her sayfada kullandığınız bir dosyaya (fonksiyorunlar dosyası mesela) yerleştirin. Ve dosyayı şifreleyin...
Bu kadar. Bu algoritma artık deşifre oldu. Her uygulamanız için ayrı algoritma oluşturmayı ihmal etmeyin!
Afiyet olsun.