![]() |
|
Модераторы: skyboy, MoLeX, Aliance, ksnk |
![]()
|
|
| bars80080 |
|
||||
![]() прапор творюет ![]() ![]() ![]() ![]() Награды: 1 Профиль Группа: Завсегдатай Сообщений: 12022 Регистрация: 5.12.2007 Где: Königsberg Репутация: 71 Всего: 315 |
мне надо раздраконить одну тему, которой я раньше не касался, а вместе с ней идёт свора вопросов
задача такая, надо соединиться с неким сервером через сокет, отправить сообщение и получить ответ передаваемые данные имею такую структуру: [заголовок][ответ] в заголовке
где целые числа передаются в сетевом формате (network byte order). соответственно вопрос 1: можно ли соединять заголовок и ответ обычной конкатенацией, как строки, учитывая, что в заголовке всё побайтово? вопрос 2: как обычное число превратить в network byte order? вопрос 3: нулевой байт 0х00, как я понял, можно ли его нарастить до нужной длины конкатенацией? не схлопнется ли от чего-нибудь? пока наработка выглядит так:
|
||||
|
|||||
| Pfailed |
|
||||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 933 Регистрация: 19.7.2009 Репутация: 5 Всего: 39 |
http://ru2.php.net/manual/en/function.pack.php
можно и конкатенацией, а можно и в pack все соеденить network order == big endian byte order 4 байта = 32 бита
можно |
||||
|
|||||
| bars80080 |
|
||||||
![]() прапор творюет ![]() ![]() ![]() ![]() Награды: 1 Профиль Группа: Завсегдатай Сообщений: 12022 Регистрация: 5.12.2007 Где: Königsberg Репутация: 71 Всего: 315 |
в cp1251 это выглядит немного иначе:
однако, мне принципиально получать результат для UTF-8 правильно ли оно делается? меня больше всего напрягает ситуация, что я не знаю, как проверять, что у меня получается. есть ли какой-нибудь способ увидеть непосредственно значения байтов? и вопрос: а как получить, допустим, число на 8 байт? через $q = pack('N*', $x), а затем докинуть впереди недостающее число нулевых байт, определённое как 8 - mb_strlen($q)? |
||||||
|
|||||||
| Pfailed |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 933 Регистрация: 19.7.2009 Репутация: 5 Всего: 39 |
Записать в файл и посмотреть в hex редакторе. Да, просто добавить спереди 4 нулевых байта. |
|||
|
||||
| bars80080 |
|
||||
![]() прапор творюет ![]() ![]() ![]() ![]() Награды: 1 Профиль Группа: Завсегдатай Сообщений: 12022 Регистрация: 5.12.2007 Где: Königsberg Репутация: 71 Всего: 315 |
собственно, что я получил, и уже несколько не догоняю. длина пустого сообщения $body_len = mb_strlen($body); $body_len = pack('N*', $body_len); дала первых четыре байта: 00 00 00 00 а нулевой байт 32 раза $null32 = ''; for($i = 0; $i < 32; $i++) { $null32 .= 0x00; } дал 30 30 - это нормальное отображение нулевого байта? Добавлено через 2 минуты и 58 секунд может, надо делать так:
|
||||
|
|||||
| ksnk |
|
|||
![]() прохожий ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 6855 Регистрация: 13.4.2007 Где: СПб Репутация: 96 Всего: 386 |
про длину пакета, скорее всего имелось ввиду strlen, а не mb_strlen. Кодирование и прочие украшательства обычно идут после приема пакета данных.
32 нулевых байта получаются так str_repeat("\0",32); Хотя проще так
Это сообщение отредактировал(а) ksnk - 9.11.2011, 12:46 -------------------- Человеку свойственно ошибаться, программисту свойственно ошибаться профессионально ! |
|||
|
||||
| Pfailed |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 933 Регистрация: 19.7.2009 Репутация: 5 Всего: 39 |
нет, 30 - это код нуля. 0x** - это шестнадцетиричная форма записи десятичных чисел. echo 0xff --> 255 |
|||
|
||||
| bars80080 |
|
|||
![]() прапор творюет ![]() ![]() ![]() ![]() Награды: 1 Профиль Группа: Завсегдатай Сообщений: 12022 Регистрация: 5.12.2007 Где: Königsberg Репутация: 71 Всего: 315 |
да, вариант с pack() в конце наиболее лучший, и в hex-редакторе видно, что получается то, что надо
теперь новая задача: создать 1024-битный закрытый ключ RSA и открытый ключ к нему смотрю на алгоритм и думаю: а нет ли уже готового метода генерации ключей на пхп? и соответственно, нет ли готового метода шифрования сообщения ключом? в списке криптов вижу только функции md5_file() - Calculates the md5 hash of a given file sha1_file() - Calculate the sha1 hash of a file crc32() - Calculates the crc32 polynomial of a string sha1() - Calculate the sha1 hash of a string hash() - Generate a hash value (message digest) но это же только хэшевые |
|||
|
||||
| Pfailed |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 933 Регистрация: 19.7.2009 Репутация: 5 Всего: 39 |
||||
|
||||
| ksnk |
|
|||
![]() прохожий ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 6855 Регистрация: 13.4.2007 Где: СПб Репутация: 96 Всего: 386 |
-------------------- Человеку свойственно ошибаться, программисту свойственно ошибаться профессионально ! |
|||
|
||||
| bars80080 |
|
|||
![]() прапор творюет ![]() ![]() ![]() ![]() Награды: 1 Профиль Группа: Завсегдатай Сообщений: 12022 Регистрация: 5.12.2007 Где: Königsberg Репутация: 71 Всего: 315 |
ох, что-то ksnk твоя ссылка требует регистрации, а в регистрации отказывает
да вроде бы то что надо, но кое в чём я застопорился мне надо RSA 1024 бита, и как я понял из описания: Выбираются два различных случайных простых числа p и q заданного размера (например, 1024 бита каждое). мне всего лишь надо подобрать два простых числа на 1024 бита это же песец полный. как??? |
|||
|
||||
| bars80080 |
|
||||
![]() прапор творюет ![]() ![]() ![]() ![]() Награды: 1 Профиль Группа: Завсегдатай Сообщений: 12022 Регистрация: 5.12.2007 Где: Königsberg Репутация: 71 Всего: 315 |
стал ковырять openssl, у них вроде как всё должно быть подогнано. даже функция получить_ключ есть.
однако, вразумительных примеров использования пока не нашёл к примеру,
и с какого бока копать - не понятно |
||||
|
|||||
| ksnk |
|
||||
![]() прохожий ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 6855 Регистрация: 13.4.2007 Где: СПб Репутация: 96 Всего: 386 |
Ну, phpclasses - довольно распространенный рессурс скриптов. вот сам класс. Насчет простых чисел - вот что сказано в комментах этого скрипта
Это сообщение отредактировал(а) ksnk - 10.11.2011, 17:13 Присоединённый файл ( Кол-во скачиваний: 8 )
rsa.class.php 5,08 Kb-------------------- Человеку свойственно ошибаться, программисту свойственно ошибаться профессионально ! |
||||
|
|||||
| bars80080 |
|
|||
![]() прапор творюет ![]() ![]() ![]() ![]() Награды: 1 Профиль Группа: Завсегдатай Сообщений: 12022 Регистрация: 5.12.2007 Где: Königsberg Репутация: 71 Всего: 315 |
да, я у них уже был, и они могут дать только small than 10,000,000,000 а насколько я понимаю 1024-битное число, это 128 байт или 2^1024, то есть мне нужно получить число порядка 2*10^308 а на компе я оперирую только числами 2^32 степени |
|||
|
||||
| ksnk |
|
|||
![]() прохожий ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 6855 Регистрация: 13.4.2007 Где: СПб Репутация: 96 Всего: 386 |
вот тут про инсталляцию OpenSSL
Нужны DLL ки в шаговой доступности и переменные окружения какие-то... Это сообщение отредактировал(а) ksnk - 10.11.2011, 17:04 -------------------- Человеку свойственно ошибаться, программисту свойственно ошибаться профессионально ! |
|||
|
||||
| bars80080 |
|
|||
![]() прапор творюет ![]() ![]() ![]() ![]() Награды: 1 Профиль Группа: Завсегдатай Сообщений: 12022 Регистрация: 5.12.2007 Где: Königsberg Репутация: 71 Всего: 315 |
а ссылка у тебя всё равно не получилась, всего лишь вэб-страничка, и она опять же ведёт к регистрации
Добавлено через 1 минуту и 42 секунды
да фишка в том, что у меня openssl установлен openssl OpenSSL support enabled OpenSSL Version OpenSSL 0.9.8g 19 Oct 2007 он же не ругается на несуществующие функции. |
|||
|
||||
| ksnk |
|
|||
![]() прохожий ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 6855 Регистрация: 13.4.2007 Где: СПб Репутация: 96 Всего: 386 |
На первый взгляд, все алгоритмы генераторов ключей обязательно сами генерируют простые числа. Причем наиболее быстрый прием - генерировать случайные числа и проверять на простоту...
Добавлено через 2 минуты и 35 секунд
а сейчас? Присоединённый файл ( Кол-во скачиваний: 4 )
rsa.class.php 5,08 Kb-------------------- Человеку свойственно ошибаться, программисту свойственно ошибаться профессионально ! |
|||
|
||||
| bars80080 |
|
||||
![]() прапор творюет ![]() ![]() ![]() ![]() Награды: 1 Профиль Группа: Завсегдатай Сообщений: 12022 Регистрация: 5.12.2007 Где: Königsberg Репутация: 71 Всего: 315 |
1024-битное? я даже не знаю как с таким числом работать а затем гнать цикл
для гигантских чисел даже страшно подумать |
||||
|
|||||
| Pfailed |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 933 Регистрация: 19.7.2009 Репутация: 5 Всего: 39 |
В openssl есть функция генерации простых чисел: http://www.openssl.org/docs/crypto/BN_generate_prime.html
Но в php похоже нет. Можно написать php-расширение с этой функцией или вызывать внешнюю программу, которая сгенерирует число. |
|||
|
||||
| bars80080 |
|
|||
![]() прапор творюет ![]() ![]() ![]() ![]() Награды: 1 Профиль Группа: Завсегдатай Сообщений: 12022 Регистрация: 5.12.2007 Где: Königsberg Репутация: 71 Всего: 315 |
в итоге openssl я более-менее наладил с помощью этого скрипта. пока вроде работает
теперь на горизонте брезжит генерация симметричного ключа DES ECB длиной 64 бита. пока без понятия за что хвататься |
|||
|
||||
![]()
|
| Правила форума "PHP" | |
|
|
Новичкам:
Важно:
Внимание:
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, IZ@TOP, skyboy, SamDark, MoLeX, awers. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | PHP: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |