Я тут пару недель назад написал скрипт для шифрования текста, кторое может пригодится при переписке в аськах, джабберах, емейлах, и тп, тоесть при передачи информации которую хотелось бы скрыть от третех лиц, например номер кошелька или типа того(думаю не нужно обьяснять то, какие люди в фурашках могут читать сообщения в подобных серисах ). хз велосипед это или нет, но мне способ показался быстрым и удобным, если баян то прошу сильно не пинать пример небольшое FAQ: Например, вы переписываетесь с кем-то по аське с номером 6648222, заходите по той ссылке, что я дал, первым делом нажимаете на кнопку generate key - появится случайно сгенерированный ключ, вставляете его в поле возле кнопки use key и нажимаете на неё. Всё, теперь скриптом будет использоваться сгенерированный ключ, далее нужно передать ключ вашему собеседнику. Это делается так: в поле рядом с кнопкой leave the key for пишете, например, его номер аськи 6648222 и нажимаете на кнопку, говорите собеседнику, что ключевым словом будет его номер аськи(можно писать что угодно), он заходит, вводит свой номер возле кнопки take a left key и нажимает её, ему автоматом выбирается тот ключ, что вы ему оставили. Сам ключ сразу же из БД удаляется. Всё, можно переписываться. Думаю объяснять, что делают кнопки decode и encode, не нужно)) © http://mh-proxy.ru/blog/index.php?mod=read&id=35 Исходник: PHP: <? function get_db() { $dbhost = "localhost"; $dbname = ""; $dbuser = ""; $dbpass = ""; $link = mysql_connect($dbhost,$dbuser,$dbpass); mysql_select_db($dbname,$link); mysql_query ("CREATE TABLE IF NOT EXISTS xchat(id INT NOT NULL AUTO_INCREMENT PRIMARY KEY,forsend varchar(50), needkey varchar(30))") ; } if( isset($_POST['takeleave']) and $_POST['takeleave'] == "need") { get_db(); $info = $_POST['info']; if( strlen($info) > 50 ) { $error2 = "very long contact data, a maximum of 50 characters"; } if( $error == "" ) { $good_info = md5($info); $sql_result = mysql_fetch_assoc(mysql_query("select `needkey` from `xchat` where `forsend` = '$good_info' ")); mysql_query("delete from `xchat` where `forsend` = '$good_info'"); if( $sql_result[needkey] == "" ) { $error2 = "nothing is left to you"; }else{ $f = basename(__FILE__); header("location:$f?key=$sql_result[needkey]"); } } } if( isset($_POST['leave']) and $_POST['leave'] == "need") { get_db(); $key = $_POST['key']; $info = $_POST['info']; $error = ""; if( !preg_match("/^[0-9]{1,2}-[a-z]{1,2}:[0-9]{1,2}-[a-z]{1,2}:[0-9]{1,2}-[a-z]{1,2}:[0-9]{1,2}-[a-z]{1,2}:[0-9]{1,2}-[a-z]{1,2}:[0-9]{1,2}-[a-z]{1,2}$/", $key) ) { $error = "malformed key"; } if( strlen($info) > 50 ) { $error = "very long contact data, a maximum of 50 characters"; } if( $error == "" ) { $good_info = md5($info); mysql_query("insert into `xchat`(`forsend`,`needkey`) values ('$good_info','$key')"); $error = "key has been successfully entered into the database"; } } if( isset($_POST['generate']) and $_POST['generate'] == "need") { $b = array('a','b','c','d','e','f','g','i','h','j','k','l','m','n','o','p','q','r','s','t','u','w','x','y','z'); $rand1 = rand(0,24); $rand2 = rand(0,24); $rand3 = rand(0,24); $rand4 = rand(0,24); $rand5 = rand(0,24); $rand6 = rand(0,24); $rand_str = rand(1,2)."-".$b[$rand1].":".rand(3,4)."-".$b[$rand2].":".rand(5,6)."-".$b[$rand3].":".rand(7,8)."-".$b[$rand4].":".rand(9,10)."-".$b[$rand5].":".rand(11,12)."-".$b[$rand6]; } if( isset($_POST['submit']) ) { $mod = $_POST['submit']; $string = $_POST['text']; $key = $_POST['key']; $error = ""; if( !preg_match("/^[0-9]{1,2}-[a-z]{1,2}:[0-9]{1,2}-[a-z]{1,2}:[0-9]{1,2}-[a-z]{1,2}:[0-9]{1,2}-[a-z]{1,2}:[0-9]{1,2}-[a-z]{1,2}:[0-9]{1,2}-[a-z]{1,2}$/", $key) ) { $error = "Error: Invalid key"; } if( strlen($string) < 1 or strlen($string) > 450 ) { $error = "Error: Text must be at least one character and no more than 450"; } $array_key = array(); $ex1 = explode(":",$key); foreach($ex1 as $str) { list($nnum,$kkey) = explode("-",$str); $array_key[$nnum] = $kkey; } if( $mod == "encode" and $error == "") { $base_string = base64_encode($string); $new_string = ""; $len = strlen($base_string); for($i=0;$i<=$len;$i++) { if( array_key_exists($i,$array_key) ) { $need_str = $array_key[$i].$base_string[$i]; }else{ $need_str = $base_string[$i]; } $new_string .= $need_str; } $result = strrev($new_string); $len = strlen($result); $new_string = ""; for($i2=0;$i2<=$len;$i2++) { if( array_key_exists($i2,$array_key) ) { $need_str = $array_key[$i2].$result[$i2]; }else{ $need_str = $result[$i2]; } $new_string .= $need_str; } $result = $new_string; }elseif($mod == "decode" and $error == ""){ $first = 0; $new_array_key = array(); ksort($array_key); foreach($array_key as $num => $key) { if($first == 0){ $first = 1; $num = $num; }else{ $num = $num+$first; $first = $first +1; } $new_array_key[$num] = $key; } $new_string = ""; $len = strlen($string); for($i=0;$i<=$len;$i++) { if( array_key_exists($i,$new_array_key) ) { $need_str = ""; }else{ $need_str = $string[$i]; } $new_string .= $need_str; } $result = strrev($new_string); $len = strlen($result); $new_string = ""; for($i2=0;$i2<=$len;$i2++) { if( array_key_exists($i2,$new_array_key) ) { $need_str = ""; }else{ $need_str = $result[$i2]; } $new_string .= $need_str; } $result = $new_string; $result = base64_decode($new_string); } if( $result == "" ){$result = $error;} } ?> <html> <body> <style type="text/css"> body { background: #000000; } </style> <table border = "6" width = "100%" height = "100%" > <td width = "70%"><div align = "center"> <form action = "" method="post"> <font color = "green" size = "6">Text entry field</font><br><br> <textarea name = "text" cols = "120" rows = "25" style="background:#006400" style="color:red" ><? echo $result ?></textarea><br><br><br> <input type = "hidden" name = "key" value = "<? echo $_GET['key']; ?>" style="background:green" > <input type = "submit" name = "submit" value = "encode" style="background:green" > <input type = "submit" name = "submit" value = "decode" style="background:green" > </div> </form> </td> <td width = "30%" > <form action = "" method = "get"> <input type = "text" name = "key" value = "<? echo $_GET['key'];?>" <? if(!isset($_GET['key']) ){echo "style=\"background:red\"";}else{echo "style=\"background:yellow\"";} ?> > <input type = "submit" value = "use key" style="background:green" > </form> <br><br> <form action = "" method = "post"> <input type = "hidden" name = "generate" value = "need"> <input type = "text" name = "key" value = "<? echo $rand_str;?>" style="background:green"> <input type = "submit" value = "generate key" style="background:green" > </form> <br><br> <form action = "" method = "post"> <input type = "hidden" name = "leave" value = "need"> <input type = "hidden" name = "key" value = "<? echo $_GET['key'];?>" style="background:green"> <input type = "submit" value = "leave the key for" style="background:green" > <input type = "text" name = "info" value = "" style="background:green"> <? if ( preg_match("/database/",$error) ) { $color = "yellow"; }else{ $color = "red"; } echo "<br><font color = '".$color."'>".$error."</font>"; ?> </form> <br><br> <form action = "" method = "post"> <input type = "hidden" name = "takeleave" value = "need"> <input type = "text" name = "info" value = "" style="background:green"> <input type = "submit" value = "take a left key" style="background:green" > <? echo "<br><font color = 'red'>".$error2."</font>"; ?> </form> <br><br><br><br> <font color = "red">© mh-coder <a href="http://mh-proxy.ru/blog/">blog</a></font> </td> </table> </body> </html>
А чем джабер не устроил? или плагин OTR? или еще какие доп. плагины по криптованию переписки? к чему создовать новый велосипед? P.S: Да и к тому же использовав числовой ключ является наислабейшим звеном в криптосистемах... темболие аську аппонента!
нус я сомневаюсь что сообщения в джабберах не храниятся на серваках и никем не читаются, насёт плагинов - незнал, а собеседнику тоже надо будет же теже плагини походу ставить? не ошень шарю в шифровании, а как вобще там ключ передаётся чтобы сообщение было разшифровано уполучателя? P.S: ключ не числовой, номер аськи является лишь ключевым словом для получения оставленого ключа
В этом и суть шифрования, на сервере сохраняется зашифрованный текст сообщения, который без ключей не имеет толка, а расшифровка происходит на клиенте, самое главное чтобы ключ при передаче собеседнику не перехватили.
учитывая comp систему - которая стоит на магистральных каналах - она может и всё что к myqsl идти - записывать, значит ключи могут перехвачены быть
В данном случае криптостойкость системы очень слаба-самая примитивная атака "Человек посередине". Советую ознакомиться для начала с понятием протокола обмена ключами Диффи-Хэлмана и реализовать этот алгоритм (хотя в C++ есть отдельная библиотека). Любая работа должна оцениваться! Молодец,что пытаешься.
угу только есть еще BREACH и BEAST. единственный надежный способ передать ключи это поместить их в большой файл скажем размером с фильм, залить его куда нибудь. дать его скачать и сразу удалить, а потом сказать вашему собеседнику на какой позиции в файле лежат ключи суть в том, что большие файлы не хранят - дороговато это пока... но это только если ваш канал уже изначально не пасут, тогда весь трафик будет хранится и сможет быть проанализирован. п.с шепнуть на ухо и сразу пристрелить))) вдруг в ухе микрофон
secserv.me Как Вам записки secserv.me? Тоже хорошая темка ) Ну если Вы нам не верите - создавайте сообщения с общим секретом - тогда даже если мы копируем ваши сообщения - про ваши общий секрет мы все равно не знаем ) Он только на клиенте.
если вами заинтересуются, никакой ключ не поможет... а так в любом случае каждая переписка фильтруется под определенные словосочетания... читать всю переписку каждого пипла - это жестоко..
Если заинтересуются - никто не спорит что паяльник в жопу не отменяют . Но логи почты, жабы и скайпа будут в убитых ссылках - и только Вам будет известно что там было написано - подтвердить не смогут правда или нет. Защищяйтесь секретным паролем на ссылку и все будет ок )
FAILed concept by all means. годная реализация идеи опубликована на Асечка стопицот лет тому назад - АйСиКью/ICQ. Безопасность. часть I - PGP. sslstrip, без 'вроде/как'