Модераторы: skyboy, MoLeX, Aliance, ksnk
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Шифрование, формирование подписи 
:(
    Опции темы
webmax
Дата 15.7.2013, 13:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 9
Регистрация: 16.9.2010

Репутация: нет
Всего: нет



Я не имел дел с шифрованием, а тут для связи сайта с банком понадобилось сделать две с виду несложных вещи. Прошу помощи:

1.  Сформировать переменную NONCE – от 8 до 32 случайным образом сформированных байтов в hex формате.

2. Есть строка: 
Код

$str = '511.483USD677144616IT Books. Qty: 217Books Online Inc.14www.sample.com 1512345678901234589999999919pgw@mail.sample.com11--1420030105153021 16F2B2DD7E603A7ADA33https://www.sample.com/shop/reply';

и есть ключ:
Код

$key = '00112233445566778899AABBCCDDEEFF';

Нужно из них сделать подпись с помощью шифрования алгоритмом HMAC_SHA1.
Я сделал вот так:
Код

hash_hmac('sha1', $str, $key);

Выдаёт: 857d471f3660de69a106ad6e214edec38bfc41a7
Но в примере сказано, что должно получиться: FACC882CA67E109E409E3974DDEDA8AAB13A5E48

Привожу выдержку из примера:
Цитата

MAC source string for this example is:
511.483USD677144616IT Books. Qty: 217Books Online Inc.14www.sample.com 1512345678901234589999999919pgw@mail.sample.com11--1420030105153021 16F2B2DD7E603A7ADA33https://www.sample.com/shop/reply
Line breaks are inserted for visibility only. This string is 190 bytes long.
After the MAC source string is assembled, the merchant system must apply a cryptographic algorithm to generate the message authentication code. Gateway supports various cryptographic algorithms and the system administrator may specify which algorithm will be used for a particular merchant terminal.
The merchant system must implement a chosen algorithm either in hardware or software form and be fully responsible for the secure storage and usage of corresponding cryptographic keys. An effective key length must be at least 112 bits for symmetric cryptographic algorithms and 1024 bits for RSA algorithm.
The default MAC algorithm is HMAC_SHA1. Standard options include Triple DES ABA/ABC CBC MAC, AES 128 CBC MAC and RSA/SHA1 signature. Additional options may be available on demand.
For our MAC source string example and HMAC_SHA1 algorithm with hexadecimal secret key “00112233445566778899AABBCCDDEEFF”, the result MAC (“P_SIGN”) field must be equal to: “FACC882CA67E109E409E3974DDEDA8AAB13A5E48”. MAC field value can be either an upper case or lower case hexadecimal string.

PM MAIL   Вверх
Fortop
Дата 15.7.2013, 17:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2200
Регистрация: 13.11.2007
Где: Донецк

Репутация: 1
Всего: 42



Цитата(webmax @  15.7.2013,  13:42 Найти цитируемый пост)
Выдаёт: 857d471f3660de69a106ad6e214edec38bfc41a7
Но в примере сказано, что должно получиться: FACC882CA67E109E409E3974DDEDA8AAB13A5E48


Внимательнее относимся
Цитата(webmax @  15.7.2013,  13:42 Найти цитируемый пост)
Line breaks are inserted for visibility only. This string is 190 bytes long.


А сколько длина этой строки в байтах?
Цитата(webmax @  15.7.2013,  13:42 Найти цитируемый пост)
$str = '511.483USD677144616IT Books. Qty: 217Books Online Inc.14www.sample.com 1512345678901234589999999919pgw@mail.sample.com11--1420030105153021 16F2B2DD7E603A7ADA33https://www.sample.com/shop/reply';




--------------------
Мир это Я.
Живее всех живых.
PM MAIL   Вверх
webmax
Дата 15.7.2013, 17:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 9
Регистрация: 16.9.2010

Репутация: нет
Всего: нет



а-а-а-а, какая же у меня невнимательность... конечно, скопировал тупо из примера, а там лишние пробелы. Спасибо огромное! 
Пока искал ответ на свои вопросы, понял ещё, что перед вставкой $key в функцию шифрования эту переменную нужно предварительно пропустить через:
Код

$key = pack('H*', $key);


Второй вопрос полностью решен! По первому вопросу подсказать сможете? Как люди делают от 8 до 32 случайным образом сформированных байтов в hex формате?
PM MAIL   Вверх
Fortop
Дата 15.7.2013, 18:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2200
Регистрация: 13.11.2007
Где: Донецк

Репутация: 1
Всего: 42



Цитата(webmax @  15.7.2013,  17:53 Найти цитируемый пост)
Как люди делают от 8 до 32 случайным образом сформированных байтов в hex формате?

не в курсе.

Можно просто генерить случайное число и конвертировать его

А можно, например, вот этим воспользоваться
http://www.php.net/manual/en/function.open...seudo-bytes.php
там есть и пример


--------------------
Мир это Я.
Живее всех живых.
PM MAIL   Вверх
webmax
Дата 16.7.2013, 18:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 9
Регистрация: 16.9.2010

Репутация: нет
Всего: нет



Если сделать так:
Код

bin2hex(pack('H*', str_shuffle('0123456789ABCDEF')))

это будет похоже на правду? smile
PM MAIL   Вверх
webmax
Дата 16.7.2013, 21:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 9
Регистрация: 16.9.2010

Репутация: нет
Всего: нет



Не, фигню написал я... Распугал ею всех форумчан, наверное smile Но, может, кто-то остался еще и поможет smile
PM MAIL   Вверх
webmax
Дата 17.7.2013, 20:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 9
Регистрация: 16.9.2010

Репутация: нет
Всего: нет



Ребята, подскажите, пожалуйста, хотя бы ответ "да/нет" на следующее: 
хекс - это не просто любой набор из символов 0-9А-F, а особым образом упорядоченный?
PM MAIL   Вверх
Fortop
Дата 17.7.2013, 22:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2200
Регистрация: 13.11.2007
Где: Донецк

Репутация: 1
Всего: 42



Цитата(webmax @  17.7.2013,  20:55 Найти цитируемый пост)
хекс - это не просто любой набор из символов 0-9А-F, а особым образом упорядоченный? 

простой набор

Добавлено через 39 секунд
111111123AAF
FAEEABEAECD1

и т.д.

Добавлено через 3 минуты и 8 секунд
Лишь один нюанс
1 байт = от 00 до FF в 16тиричной системе (0-255 в 10тичной)



--------------------
Мир это Я.
Живее всех живых.
PM MAIL   Вверх
webmax
Дата 18.7.2013, 06:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 9
Регистрация: 16.9.2010

Репутация: нет
Всего: нет



Спасибо! Выходит, что число символов должно быть обязательно четным. В таком случае для моей задачи вполне подойдёт такой вариант:
Код

substr(str_shuffle('0000111122223333444455556666777788889999AAAABBBBCCCCDDDDEEEEFFFF'), 0, 16)

Я прав?

Я писал:
Цитата

Не, фигню написал я...

потому что позже понял, что вот это:
Код

bin2hex(pack('H*', str_shuffle('0123456789ABCDEF')))

то же самое, что просто это:
Код

str_shuffle('0123456789ABCDEF')

Проблема в том, что я понятия особого не имею о глубинной сути хекс-формата. Поэтому и пытался использовать именно хексовую функцию bin2hex, надеясь, что если хекс - это не просто любой набор из 0-9А-F, а особым образом упорядоченный, то bin2hex сделает своё дело. Но, к счастью, как оказалось, никакой особой упорядоченности в символах хекса не должно быть smile

Это сообщение отредактировал(а) webmax - 18.7.2013, 06:42
PM MAIL   Вверх
Fortop
Дата 18.7.2013, 11:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2200
Регистрация: 13.11.2007
Где: Донецк

Репутация: 1
Всего: 42



Цитата(webmax @  18.7.2013,  06:42 Найти цитируемый пост)
о глубинной сути хекс-формата

Это просто 16тиричная система исчисления.
где все числа должны быть представлены из цифр 0-9 и букв A-F

никакой другой сути у нее нет.

Цитата(webmax @  18.7.2013,  06:42 Найти цитируемый пост)
substr(str_shuffle('0000111122223333444455556666777788889999AAAABBBBCCCCDDDDEEEEFFFF'), 0, 16)

запутано и непонятно. Но может подойти

Что мешает просто взять 4 случайных числа в диапазоне от 0 до 2^16 сконвертировать их в 16тиричный вид и просто конкатенировать эти четыре строки предварительно выровняв нулями до 4х символов каждую?


--------------------
Мир это Я.
Живее всех живых.
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса

Внимание: данный раздел предназначен для решения сложных, нестандартных задач.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | PHP: Для профи | Следующая тема »


 




[ Время генерации скрипта: 0.1183 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.