ANTICHAT.XYZ    VIDEO.ANTICHAT.XYZ    НОВЫЕ СООБЩЕНИЯ    ФОРУМ  
Баннер 1   Баннер 2

ANTICHAT — форум по информационной безопасности, OSINT и технологиям

ANTICHAT — русскоязычное сообщество по безопасности, OSINT и программированию. Форум ранее работал на доменах antichat.ru, antichat.com и antichat.club, и теперь снова доступен на новом адресе — forum.antichat.xyz.
Форум восстановлен и продолжает развитие: доступны архивные темы, добавляются новые обсуждения и материалы.
⚠️ Старые аккаунты восстановить невозможно — необходимо зарегистрироваться заново.
Вернуться   Форум АНТИЧАТ > Программирование_OLD > PHP, PERL, MySQL, JavaScript
   
 
 
Опции темы Поиск в этой теме Опции просмотра

Свой кодировщик
  #11  
Старый 19.03.2009, 20:21
Pashkela
Динозавр
Регистрация: 10.01.2008
Сообщений: 2,841
Провел на форуме:
9220514

Репутация: 3338


Отправить сообщение для Pashkela с помощью ICQ
По умолчанию Свой кодировщик

Прилетело сегодня такое сообщение в личку:

Цитата:
Вот имеется такая проблемка
нужно "зашифровать" текст например так:

вводим строку, длинну "блока" иалгоритм по которуму будут "перемешиваться" буквы...


пример:

строка: привет
длинна блока: 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)
 


Быстрый переход




ANTICHAT.XYZ