в функции нужен ключ для шифрования строки без mcrypt libraly в 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; }
в этом не работает для i character i test it
Этот код довольно неэффективен, я не удивлен, что он не дает намеченных результатов.
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); }
Протестировано, и, похоже, он работает отлично.
В любом случае, я должен предупредить вас, что это действительно небезопасная форма шифрования, большинство паролей используют одни и те же наборы символов и довольно небольшой диапазон длин, что делает эту систему очень уязвимой для людей, способных работать с довольно хороший уровень точности пароля.
Вот еще один способ:
$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; }
Опять же, не ожидайте, что это будет очень безопасно.
Вы также можете попробовать следующее:
или это:
или даже это:
Я использовал jlogsdon enc_encrypt
и enc_decrypt
в prestashop 1.4.4.1, чтобы обернуть методы encrypt
и decrypt
из класса Rijndael, которые используют mcrypt. Я не проверял, дают ли enc_encrypt
и enc_decrypt
то же самое, что и mcrypt_encrypt
и mcrypt_decrypt
, но они, похоже, работают в prestashop 1.4.4.1. Большое спасибо.