• 16-01-2010, 11:53:22
    #1
    Arkadaşlar merhaba,

    uzun süredir üzerinde düşündüğüm halde stabil bi mantık geliştiremedim.

    Sorunum şudur;

    Post edilen veriyi şifrelemek için;
    function Encode($data,$pwd)
    {
        $pwd_length = strlen($pwd);
        for ($i = 0; $i < 255; $i++) {
            $key[$i] = ord(substr($pwd, ($i % $pwd_length)+1, 1));
            $counter[$i] = $i;
        }
        for ($i = 0; $i < 255; $i++) {
            $x = ($x + $counter[$i] + $key[$i]) % 256;
            $temp_swap = $counter[$i];
            $counter[$i] = $counter[$x];
            $counter[$x] = $temp_swap;
        }
        for ($i = 0; $i < strlen($data); $i++) {
            $a = ($a + 1) % 256;
            $j = ($j + $counter[$a]) % 256;
            $temp = $counter[$a];
            $counter[$a] = $counter[$j];
            $counter[$j] = $temp;
            $k = $counter[(($counter[$a] + $counter[$j]) % 256)];
            $Zcipher = ord(substr($data, $i, 1)) ^ $k;
            $Zcrypt .= chr($Zcipher);
        }
        return $Zcrypt;
    }
    bu fonksiyonu kullanıyoruz.

    Geri Şifreleme (decode) için;

    function hex2bin($hexdata) {
        for ($i=0;$i<strlen($hexdata);$i+=2) {
            $bindata.=chr(hexdec(substr($hexdata,$i,2)));
        }  
        return $bindata;
    }
    bu şekilde fonksiyonumuz var.

    örnek olarak
    $secretPass = 'kljhflk73#OO#*U$O(*YO';
    $encodeThis = 'ertan'; 
    // **** //
    $encoded = bin2hex(Encode($encodeThis,$secretPass)); // şifrelenmiş veri örnegin "akdh09da" gibi bişey
    
    $decoded = Encode(hex2bin($encoded),$secretPass); // gerişifrelenmiş veri yani "ertan"
    şeklinde şifreleme ve geri şifreleme başarılı olarak çalışıyor.

    Yanlız sorunum şudur;

    $encoded sürekli değişecek, her tıklamada farklı bir deger alacak.

    fakat decode edildiğinde bütün farklı değerler yine $encodeThis = 'ertan' ı verecek.

    benim düşüncem şu şekilde oldu, fakat pek kullanışlı olmadı:


    $secretPass = time();

    deyip, sürekli değişen zamanla her tıkta farklı bi encode çıkıyor.
    $secretPass 'ı da database de tutturup decode yaparken db den çekiyoruz, her tıklamada db den kullanılmış $secretPass ı silip yeni zamanı $secretPass olarak ekliyoruz.

    Acaba başka bir yöntem uygulanabilirmi? aklınıza gelen birşeyler varmı ?
    Yardımcı olursanız çok makbule geçecek, acil olarak gerekli çünkü.

    Teşekkürler.
  • 16-01-2010, 13:05:31
    #2
    ee arkadaşlar yokmu bi yardımcı olacak?
    bu kadar zor olmamalı ya :S
  • 16-01-2010, 13:24:22
    #3
    şöyle yapabilirsin kardeş mesela şifreliyeceğin kelime şu "husee" bak her harfin arasına rasgele en az 3 tane veya isteğe göre rasgele harf yazdırırrsın "h54tu548skjıejşoe" mesela bunun gibi encode işleminde her seferinde rasgele çıktığı için her encode farklı olucaktır decode etme yöntemidede tam tersiniyapıcaksın işte kolay gelsin
  • 16-01-2010, 21:14:24
    #4
    İstediğin mantığı anladım ancak bunu time ile yapamazsın geri şifrelemede
    ozamanki time değerine ihtiyacın olacak. Eğer mysqlde şifrenin yanına
    birde o şifreyi oluştururken kullandığın time değerini koyarsan ancak olabilir.
    Onun dışında pek mümkün değil. Yinede mysqle time değeri koymadan yapmak istiyorum
    diyosan geri şifrelemeyi iki adımda yap ilk gerişifreleme geçtikten sonra time|hash olarak
    iki değer çıksın time değeri ile hash'i de gerişifreleme yapabilecek şekilde olsun.

    Anca bu tarz bir mantık kullanabilirsin.