Этот код довольно неэффективен, я не удивлен, что он не дает ожидаемых результатов.
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);
}
Протестировано, и у меня все работает нормально.
В любом случае я должен предупредить вас, что это действительно небезопасная форма шифрования, большинство паролей используют одинаковые наборы символов и довольно небольшой диапазон длин, что делает эту систему очень уязвимой для людей, способных работать с довольно хорошим уровнем точности пароля.