2009-04-29 3 views
4

en fonction besoin clé pour chiffrer chaîne sans mcrypt libraly en phpComment crypter chaîne sans mcrypt bibliothèque en php

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; 
    } 

dans ce travail pas pour i caractère i le tester

+0

dire quoi? Besoin de plus d'informations pour cette question. –

Répondre

4

Ce code est plutôt inefficace , Je ne suis pas surpris que cela ne donne pas les résultats escomptés.

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é et il semble bien fonctionner pour moi. De toute façon, je pense que je devrais vous avertir que c'est une forme de cryptage vraiment peu sûre, la plupart des mots de passe utilisent les mêmes ensembles de caractères et une gamme assez courte de longueurs, ce qui rend ce système très vulnérable aux personnes capables de travailler avec un assez bon niveau de précision le mot de passe.

+0

ne fonctionne pas bien pourquoi? –

6

Voici une autre méthode:

$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; 
} 

Encore une fois, ne vous attendez pas à être très sûr.

+0

C'est cool! Merci – trante

+0

Qu'en est-il d'urlencoding la chaîne au début de la fonction encrypt, et urldecoding au début de la fonction de décryptage? sinon le résultat peut contenir des caractères "+", "=" et "/". – trante

+0

Je suppose que la meilleure façon est d'ajouter ** $ string = urldecode ($ string); ** à ** enc_decrypt ** et, en ajoutant ** return urlencode (base64_encode ($ result)); ** à ** enc_encrypt ** – trante

1

J'utilisé jlogsdon enc_encrypt et enc_decrypt dans prestashop 1.4.4.1 pour envelopper encrypt et decrypt méthodes de la classe Rijndael, sorcière utilisent mcrypt. Je n'ai pas vérifié si enc_encrypt et enc_decrypt donnent exactement le même résultat que mcrypt_encrypt et mcrypt_decrypt, mais ils semblent fonctionner dans prestashop 1.4.4.1. Merci beaucoup.

Questions connexes