Добрый день!
Сегодня я расскажу о моем механихме шифрования.
Не знаю — может он ненадежный, может его уже кто-то изобрел, как говорится, «я хз, мне норм».
Итак, приступим.
Сначала шифрование. Для начала берем строку, который нужно зашифровать, переводим его в base64 (так как base64 ключ состоит только из символов a-z, A-Z, 0-9).
Затем с каждого символа получаем md5-хэш, для удобства кладем в массив.
С каждого хэша берем символ №3,6,1,2 (можно другие, я решил что эти подойдут) и склеиваем их.
Чтобы расшифровать проходимся циклом по коду, заменяем хэш[3,6,1,2] на символ, которому он соответствует.
Ну, и потом декодируем из base64.
Код:
<?php
function encode($unencoded,$key){//Шифруем
$string=base64_encode($unencoded);//Переводим в base64
$arr=array();//Это массив
$x=0;
while ($x++< strlen($string)) {//Цикл
$arr[$x-1] = md5(md5($key.$string[$x-1]).$key);//Почти чистый md5
$newstr = $newstr.$arr[$x-1][3].$arr[$x-1][6].$arr[$x-1][1].$arr[$x-1][2];//Склеиваем символы
}
return $newstr;//Вертаем строку
}
function decode($encoded, $key){//расшифровываем
$strofsym="qwertyuiopasdfghjklzxcvbnm1234567890QWERTYUIOPASDFGHJKLZXCVBNM=";//Символы, с которых состоит base64-ключ
$x=0;
while ($x++<= strlen($strofsym)) {//Цикл
$tmp = md5(md5($key.$strofsym[$x-1]).$key);//Хеш, который соответствует символу, на который его заменят.
$encoded = str_replace($tmp[3].$tmp[6].$tmp[1].$tmp[2], $strofsym[$x-1], $encoded);//Заменяем №3,6,1,2 из хеша на символ
}
return base64_decode($encoded);//Вертаем расшифрованную строку
}
?>
Код самой формы не буду показывать, там все просто.
Слово «Хабр», зашыфрованное ключом «12345» будет «739ef7fc5215e83e5215b8345a02e83e706a8fff5a025e2f5215618bfa54505b52155e2fec2755e2dc07a1106837c7fe29caa11052151c34739ef7fc5215e83e5215b834f9b77ca1706ac7fe65b765b7», а «habr» с тем же ключом будет «7375314fc971f7fca334f9b765b765b7».
Думаю не надо объяснять что base64 с кириллицы длиннее, чем с латиницы.
Ну вот и все.
Демка тут.