Php mcrypt kütüphanesi olmadan dize şifrelemek

4 Cevap php

fonksiyonu php libraly mcrypt olmadan dize şifrelemek için anahtar gerekir

function encrypt($str, $pass){
        $str_arr = str_split($str);
        $pass_arr = str_split($pass);
        $add = 0;
        $div = strlen($str) / strlen($pass);
        while ($add <= $div) {
             $newpass .= $pass;
             $add++;
        }
        $pass_arr = str_split($newpass);
        foreach($str_arr as $key =>$asc) {
            $pass_int = ord($pass_arr[$key]);
            $str_int = ord($asc);
            $int_add = $str_int + $pass_int;
            $ascii .= chr($int_add);
        }
        return $ascii;
    }

    function decrypt($enc, $pass){
        $enc_arr = str_split($enc);
        $pass_arr = str_split($pass);
        $add = 0;
        $div = strlen($enc) / strlen($pass);
        while ($add <= $div) {
            $newpass .= $pass;
            $add++;
        }
        $pass_arr = str_split($newpass);
        foreach($enc_arr as $key =>$asc) {
            $pass_int = ord($pass_arr[$key]);
            $enc_int = ord($asc);
            $str_int = $enc_int - $pass_int;
            $ascii .= chr($str_int);
        }
        return $ascii;
    }

Bu i test i karakteri için çalışmıyor

4 Cevap

Bu kod Ben istenen sonuçları vermez şaşırmadım, oldukça verimsiz.

echo RotEncrypt('cheese', 'pie') . "\n<br>\n"
    .RotDecrypt(RotEncrypt('cheese', 'pie'), 'pie');
// ÓÑÊÕÜÊ
// cheese

function RotEncrypt($str, $pass){
   $pass = str_split(str_pad('', strlen($str), $pass, STR_PAD_RIGHT));
   $stra = str_split($str);
   foreach($stra as $k=>$v){
     $tmp = ord($v)+ord($pass[$k]);
     $stra[$k] = chr( $tmp > 255 ?($tmp-256):$tmp);
   }
   return join('', $stra);
}
function RotDecrypt($str, $pass){
   $pass = str_split(str_pad('', strlen($str), $pass, STR_PAD_RIGHT));
   $stra = str_split($str);
   foreach($stra as $k=>$v){
     $tmp = ord($v)-ord($pass[$k]);
     $stra[$k] = chr( $tmp < 0 ?($tmp+256):$tmp);
   }
   return join('', $stra);
}

Test edilmiş ve bu benim için para cezası çalışması için görünür.

Ben bu şifreleme gerçekten güvensiz şeklidir sizi uyarmak gerekir hissediyorum ya da yolu, en şifreleri aynı karakter setleri ve insanlar oldukça ile çalışmak için güçlü olmak için bu sistem çok savunmasız hale uzunlukları oldukça küçük bir dizi kullanın doğruluk şifre iyi seviyede.

İşte başka bir yöntem var:

$key = 'the quick brown fox jumps over the lazy ';
$string = 'Hey we are testing encryption';

echo enc_encrypt($string, $key)."\n";
echo enc_decrypt(enc_encrypt($string, $key), $key)."\n";

function enc_encrypt($string, $key) {
    $result = '';
    for($i = 0; $i < strlen($string); $i++) {
    	$char = substr($string, $i, 1);
    	$keychar = substr($key, ($i % strlen($key))-1, 1);
    	$char = chr(ord($char) + ord($keychar));
    	$result .= $char;
    }

    return base64_encode($result);
}

function enc_decrypt($string, $key) {
    $result = '';
    $string = base64_decode($string);

    for($i = 0; $i < strlen($string); $i++) {
    	$char = substr($string, $i, 1);
    	$keychar = substr($key, ($i % strlen($key))-1, 1);
    	$char = chr(ord($char) - ord($keychar));
    	$result .= $char;
    }

    return $result;
}

Yine, bu çok güvenli olmasını beklemeyin.

Bu yöntemler, bir kodlanmış base64 olması dışında, her ikisi de aynıdır.

Her karakter ascii koduna döndü ve anahtar ASCII kodu ile eşleşti gibi bu da çok güvenli olmayan çözümleri vardır ... o tamsayı karakteri bulunan, birbirine eklenir.