ANTICHAT — форум по информационной безопасности, OSINT и технологиям
ANTICHAT — русскоязычное сообщество по безопасности, OSINT и программированию.
Форум ранее работал на доменах antichat.ru, antichat.com и antichat.club,
и теперь снова доступен на новом адресе —
forum.antichat.xyz.
Форум восстановлен и продолжает развитие: доступны архивные темы, добавляются новые обсуждения и материалы.
⚠️ Старые аккаунты восстановить невозможно — необходимо зарегистрироваться заново.

19.03.2009, 20:21
|
|
Динозавр
Регистрация: 10.01.2008
Сообщений: 2,841
Провел на форуме: 9220514
Репутация:
3338
|
|
Свой кодировщик
Прилетело сегодня такое сообщение в личку:
Вот имеется такая проблемка
нужно "зашифровать" текст например так:
вводим строку, длинну "блока" иалгоритм по которуму будут "перемешиваться" буквы...
пример:
строка: привет
длинна блока: 4 (т.е. делим строку на блоки по 4 буквы и если в блоке не хватает букв, то дополняется рандомными буквами в данном случаем пусть будет "ос")
алгоритм: 3124
получается: ипрвоетс
Решил, показалось интересным, добавил расшифровку, может кому и пригодиться:
PHP код:
<pre>
<?php
$slov = 'корректно работает со словами по отдельности и текстом в частности'; // Слово для шифрования (или текст)
$bl = 8; // Длина блока, на которые делим слово
$ran = 'бямпуент'; // Мусор, который добавляем, если при делении слова получился кусок меньше длины блока
$key = '38247165'; // Ключ перестановки (в пределах длины блока)
$shifr_slov = encode($slov,$bl,$ran,$key);
echo "Пример шифрования\n";
echo "Слово < $slov >\n";
echo "Зашифрованное слово < $shifr_slov >\n";
function encode($slovo,$blog,$rand,$alg) {
$res2 = str_split($alg);
for ($i=0;$i<count($res2);$i++) $res2[$i]--;
$res = str_split($slovo,$blog);
for ($i=0;$i<count($res);$i++) {
if (strlen($res[$i])<$blog) $res[$i] = $res[$i].$rand;
}
for ($i=0;$i<count($res);$i++) $res1[] = str_split($res[$i]);
for ($i=0;$i<count($res1);$i++) {
for ($j=0;$j<count($res1[0]);$j++) {
$b = $res2[$j];
$hash.=$res1[$i][$b];
}
}
return $hash;
}
###########################################
echo "\n\n\n\n\n";
echo "Пример декодирования\n";
$slov = $shifr_slov; // Слово для расшифровки (или текст)
//$bl = 4; // Длина блока, на которые делим слово
//$ran = 'ос'; // Мусор, который добавляем, если при делении слова получился кусок меньше длины блока
//$key = '3124'; // Ключ перестановки (в пределах длины блока)
echo "Зашифрованное слово < $slov >\n";
echo "Расшифрованное слово < ".decode($slov,$bl,$ran,$key) . " >\n";
function decode($slovo,$blog,$rand,$alg) {
$buff = '';
$res2 = str_split($alg);
for ($i=0;$i<count($res2);$i++) $res2[$i]--;
for ($i=0;$i<count($res2);$i++) {
$c = $res2[$i];
$res3[$c] =$i;
}
$res = str_split($slovo,$blog);
for ($i=0;$i<count($res);$i++) $res1[] = str_split($res[$i]);
for ($i=0;$i<count($res1);$i++) {
for ($j=0;$j<count($res1[0]);$j++) {
$b = $res3[$j];
$hash.=$res1[$i][$b];
}
}
$hash = str_replace($rand,'',$hash);
for ($i=strlen($rand);$i>0;$i--) {
$buff=substr($rand,0,$i);
if (strpos($hash,$buff)) {
$hash = str_replace($buff,'',$hash);
$buff = '';
$i=0;
}
}
return $hash;
}
?>
</pre>
корректно работает со словами по отдельности и текстом в частности (правда при достаточной длине мусора, чтобы было как можно меньше совпадений в мусоре (в слогах) и кодируемом/декодируемом тексте)
т.е. имеет смысл при длине блока и мусора от 4-х единиц
ЗЫЖ Пост подправил, привел более интересный пример, включая совпадения букв мусора с буквами с кодируемом тексте
т.е. то, что выше, превращает
"корректно работает со словами по отдельности и текстом в частности"
в
"рнортккера атооб лтссе оаовмпо итнодь леттси ои свкт емоасчсо нтбеияутпм"
и обратно.
В принципе, не имея длины блока, ключа и мусора - хрен расшифруешь.
Последний раз редактировалось Pashkela; 13.08.2009 в 15:56..
|
|
|
|
|
Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
|
|
|
|