- 01
- 02
- 03
- 04
- 05
- 06
- 07
- 08
- 09
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
- 46
- 47
- 48
- 49
- 50
- 51
- 52
- 53
- 54
- 55
- 56
function unpackLoginAndPas($signed,$iv, $dateSend){
global $crypt, $cryptLast, $defaultDate, $ivsId, $mysqlBaseName, $mysqlBase;
//получаем текущую дату.
if (isset($dateSend) )
$date = $dateSend;
else
$date = $defaultDate;
$query = "SELECT id FROM ivs WHERE val='$iv';" ;
$query = $mysqlBase->query($query);// or die (compactResult('error','криворукий программист!'));
//есть ли такой маркер безопасности?
if ($query->num_rows)//раз есть, то надо послать за другим маркером. Такой уже не годиться.
die (compactResult('error','bad iv marker,pls generate new iv'));
//запоминаем такой маркер безопасности, и больше под ним не пускаем.
//получаем id автоинкремент
$myBase = $mysqlBase->query("SHOW TABLE STATUS FROM $mysqlBaseName") or die (compactResult('error','SystemTable not get (')); ;
$result = false;
//поиск времени изменения БД.
$dateSrv = (int)( $date->getTimestamp() / 1000 );
while($row = $myBase->fetch_assoc()){
if ($row['Name'] !== "ivs" )
continue;
$ivsId = $row["Auto_increment"];
}
$userIP = getUserIpAddr();
$mysqlBase->query("INSERT INTO ivs(val,IP) VALUES('$iv','$userIP')") or die(compactResult('error','криворукий программист!'));
//составляем строку из даты, которая у нас будет ключем. 1 раз в 5 минут она становиться другой.
$decodeKey = /*формирование строки от даты*/
$dateLast = $date->add( DateInterval::createFromDateString(' 5 minuts ' ) );
$decodeKeyLast = /*формирование строки от даты*/
//var_dump($decodeKey);
$decodeKey = md5($decodeKey);
$decodeKeyLast = md5 ( $decodeKeyLast );
mcrypt_generic_init ($crypt,$decodeKey,$iv);
mcrypt_generic_init ($cryptLast,$decodeKeyLast,$iv);
//декриптуем
$encDataLoginAndPass = rtrim (mdecrypt_generic($crypt,$signed));
$encDataLoginAndPassLast = rtrim (mdecrypt_generic($cryptLast,$signed));
//если правильный был и ключ(время не истекло) и
//var_dump($encDataLoginAndPass);
$encDataLoginAndPass = json_decode ($encDataLoginAndPass,true) or ( ($decodeKey = $decodeKeyLast ) and json_decode ($encDataLoginAndPassLast,true) )or die(compactResult('error','Key time out.'));
//в поле secdata в POST будет лежать массив, декодированный
mcrypt_generic_init ($crypt,$decodeKey,$iv);
$temp = array_keys($encDataLoginAndPass);
$encData = array('login'=>$temp[0], 'password'=>end($encDataLoginAndPass));
$encPost = mdecrypt_generic($crypt, base64_decode( $_POST['secdata'] ) );
$encData['post'] = json_decode (rtrim($encPost)) or die(compactResult('error','post uncompressed!'));
//деинит
mcrypt_generic_deinit ($crypt);
//раз все прошло успешо, возвращаем массив с логином и паролем, который проверяем дальше. Тут даже использование вместо пароля, его хеша не поможет от хака. будем надеятся на алгоритм шифровки. Хотя есть взять, и знать что тут будет одинаковая информация, то вычислить её по паре перехваченных обращений не составит труда. Надо бы переделать на хеш от логина с паролем. Хотя и это врядли поможет. Надо взять что-то изменяемое. От чего можно будет отталкиваться. Но это надо обдумывать.
return $encData;
};
попытка шифрования в 1-м проекте.
Человек первый раз писал на php. Оно и видно...
bormand 17.04.2014 11:11 # +4
Самое интересное место выкинул ;)
Там хоть какой-то секретный кусок (API key?) используется, или тупо чистая дата?
Dart_Sergius 17.04.2014 11:29 # +1
Dart_Sergius 17.04.2014 11:38 # +1
Сам я с++-шник.
vistefan 17.04.2014 13:02 # 0
Сиплюсплюсшник? Говно какое-то.
3.14159265 17.04.2014 13:17 # +5
Крестоблядь.
bormand 17.04.2014 13:24 # +9
bormand 17.04.2014 13:25 # +6
3.14159265 17.04.2014 14:49 # +2
3Doomer 18.04.2014 14:46 # +1
bormand 18.04.2014 14:47 # +1
Abbath 17.04.2014 17:21 # +1
bormand 17.04.2014 18:21 # +1
Недостаточная абстракция от веба...
Надо на canvas & websocket замутить тонкого клиента, и забыть о html, js, css и прочей хуйне как о страшном сне :) Только кресты, только хардкор.
roman-kashitsyn 17.04.2014 18:27 # +3
только boost.asio / libuv, только хардкор
myaut 17.04.2014 12:06 # +2
Умри, криворукий программист!
bormand 17.04.2014 12:26 # 0
> Умри, криворукий программист!
Походу этот раз для него оказался последним :(
eth0 17.04.2014 19:31 # 0
Вот это адовее. Почему-то в этой квере решил убрать.
bormand 17.04.2014 19:42 # +1
Она часто падала.
Lokich 18.04.2014 10:27 # +2
я чет не вижу особой разницы между кодом людей, которые годами на php кодят
bormand 18.04.2014 11:12 # +1
Lokich 18.04.2014 11:41 # +1
bormand 18.04.2014 11:54 # +1
eth0 18.04.2014 17:47 # +1
guest 19.04.2014 09:38 # +1
eth0 19.04.2014 12:14 # +1
bormand 19.04.2014 13:08 # +5
Сам проверял? :) Говорят, что в недрах OpenSSL творится такой пиздец, что не каждый решается его прочесть...
Ну и доки к OpenSSL на офсайте/в манах просто ахуенны. Кто пытался заюзать openssl и читал их - меня поймет. Пример доки: https://www.openssl.org/docs/crypto/rsa.html
eth0 19.04.2014 15:27 # +1
А так, когда-то использовал, проблемы были, но не настолько дикие.
Логика микрософтовских провайдеров меня вымораживала больше, я однажды убил два дня, чтобы только понять, как зашифровать-подписать и с какого у меня не работает.
defecate-plusplus 19.04.2014 15:31 # +1
т.е. надо было реализовать одновременно на openssl и m$
оба пиздец, несомненно
bormand 19.04.2014 15:34 # 0
Там хоть доки есть... А не тупой список функций. Но да, без бутылки обертки не въедешь :)
А вообще, если нужна только софтовая крипота: crypto++.
bormand 19.04.2014 15:42 # 0
И botan.
eth0 19.04.2014 15:47 # +1