@makseli hash değil şifreleme kullanılmalı dedim.
Hash : kontrol amaçlı kullanılır ve geri döndürülemez. örneğin : girilen değerin mod 5 i olarak hash algoritmamız var, bu durumda her 5 değer aynı sonucu döndürecektir. Ben 8 değeride girsem 13 değeri de girsem bunun hashi 3 olacaktır. yani benim gerçekte hangi değeri girdiğimi bilme şansınız çok düşük. çünkü 546464468 hash değeride 3 olacaktır. md5 bunu çok daha karışık yapıyor. denk gelme olasılığı atıyorum katrilyonda 1 böylede olsa denk gelme olasılığı var.
Şifreleme : geri döndürülebilir şekilde veriyi karıştırmak demektir. Mesela en basitinden girilen veriyi tersine çevirmek. Bu şifreleme algoritmaları yine md5'te olduğu gibi bunu daha karmaşık yapıyorlar. karıştırmak için bir anahtar değer kullanıyorlar. Laravel configurasyonundaki 'key' değeri bunun içindir. Temel şifreleme metodlarından bir tanesi veriyi xor operatorunden geçirmek. Bit veri için aşağıdaki tablodaki gibi bir çevrim yapar.
1 1 0
1 0 1
0 1 1
0 0 0
Şimdi bunu nasıl kullanıyor şifreleme algoritmaları
şifrelenecek değer : a olsun
anahtar : b olsun
a nın bit karşılığı : 01100001
b nin bit karşılığı : 01100010
------------------------------------
x or operatörü ile : 00000011
yukardaki bit değeri text karaktere denk gelmedi gelmek zorunda da değil. şu an şifreledik bu veriyi. şifrelenmiş veriyi bulmak için işlemi tersine çeviriyoruz :
x or operatörü ile : 00000011
b nin bit karşılığı : 01100010
------------------------------------
: 01100001
burda şifrelenmiş veriyi geri çevirmek için anahtara sahip olmak gerekir.
şimdi bir sonraki adım uzun keyler ne işe yarıyor :
mesela keyimiz : V??ederf4%%6rftgfdy66456 gbi bişi olsun
biz metin için : aaaaaaaaaaaaaaaaaaaaaa değerini kullansak bile metnimizin her bytesi için ayrı sonuç dönecektir.
birde metne : 'aaaaaaaaaaaaaaaaaaaaaa_'.strtotime(); yaparsak aynı değer girilse bile farklı sonuçlar dönecektir. temiz metni aynı şekilde elde edip sonradan eklediğimizi çıkartarak temiz metne erişiriz. girilen metni ters çevirme işlemi vs. gibi geri döndürülebilir fonksiyonlara sokabilirsiniz. en sevdiğim aralara karakter sokmak :)))
inceleyebileceğiniz küçük bir algoritma
http://resulaslan.com/work/sifrele.php
http://www.resulaslan.com/sifrele.php?yazi=TesTere şeklinde test edilebilir :)))
<hr>
<form method="post" action="sifrele.php">
<textarea name="sifreli" cols="100" rows="4"></textarea> <br>
<input type="submit">
</form>
<?php
function sifrele($text,$key) {
$text = base64_encode(md5(uniqid('',true))."_".strrev($text));
$outText = '';
// Iterate through each character
for($i=0;$i<strlen($text);$i++)
{
$outText .= $text{$i} ^ $key{$i % strlen($key)};
}
return base64_encode($outText);
}
function sifrecoz($string,$key) {
// Our plaintext/ciphertext
$text =base64_decode($string);
// Our output text
$outText = '';
// Iterate through each character
for($i=0;$i<strlen($text);$i++)
{
$outText .= $text{$i} ^ $key{$i % strlen($key)};
}
$outText = base64_decode($outText);
list($zaman,$domain_reverse,$key_md5,$zaman2) = explode("_",$outText);
return strrev($domain_reverse);
}
$key = "fe5c095a031020d1fd38d10085b2db13"; $metin = $_GET["yazi"] ? $_GET["yazi"]:"Resul ASLAN";
$sifreli = sifrele($metin,$key);
$sifreli = $_POST["sifreli"]?$_POST["sifreli"]:$sifreli;
echo "Şifreli Metin:<br>";
echo $sifreli;
echo "<hr> Temiz Metin<br>";
echo sifrecoz($sifreli,$key);
?>