2016-03-29 2 views
0

Я пытаюсь защитить свои онлайн-транзакции еще немного.Сохранение двоичных данных в базе данных для обеспечения безопасности

Процесс Я использую для онлайн сделок: 1. Пользователь создает Заказать 2. Пользователь перенаправляет в банк для оплаты (т.е. PayPal) 3. Банк (PayPal) контактов страницы .php (Paypal IPN) в скажи мне, что заказ прошел. 4. Пользовательский заказ прошел.

В каждой транзакции, которую я генерирую, я создаю строку из sha512. Я хочу сохранить это в базе данных, чтобы аутентифицировать информацию о заказе, когда IPN PayPal связывается со мной, чтобы сообщить мне, что заказ завершен.

Чтобы сохранить пространство базы данных, я недавно прочитал this answer и подумал, что было бы хорошо сохранить строку в двоичном столбце. У меня вопрос, как мне это сделать с PHP?

Так что у меня есть строка:

A99ACAF1FA7337F451C344C84F6800037F17EABBC32073ECEA6688B4BAD116BDB288B0D24DE7DD5C53E26A0B41242B2D2D065EDFDA5C16B4706CD5DC57226580

В PHP, как преобразовать, что в двоичное значение, так что я могу хранить их в базе данных? И будет ли он по-прежнему уникальным, как и выше? Лучшее, что я могу сделать, это строка PHP pack, но я не уверен, как ее использовать. Или это правильный способ его использования. Обычно я бы просто сохранил вышеуказанный хэш в VARCHAR(512), но я хочу сохранить размер базы данных, а 512 символов - это много данных.

ответ

1
echo hash('sha512', 'hash_string', true); 

Третий аргумент raw_output: если установлено значение TRUE, то выводит необработанные двоичные данные. (doc). Поскольку существует взаимно однозначное соответствие между гекситами и их двоичной величиной, вы не теряете «уникальность».

Длина всегда составляет 64 байта. Но если вы напишете хэш в гексах, то это будет 128 символов, не 512.

+0

Итак, я могу взять этот 'raw_output' и записать его непосредственно в базу данных? – Chud37

+0

уверен, вы можете. просто используйте поле 'VARBINARY', если вы это сделаете в mysql – Federkun

+0

Хорошо, у меня проблемы с PDO, мне нужно связать данные странным образом? Просто добавление его в готовые переменные, похоже, не принимает. – Chud37

Смежные вопросы