Новое в шифровании с помощью PHP, пожалуйста, направление? - PullRequest
3 голосов
/ 06 января 2010

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

Существует ли относительно простой в использовании способ шифрования номеров кредитных карт, который я могу быстро реализовать? Набор функций, класс, что-нибудь еще, что сделает работу хорошо и хорошо? Я пользуюсь этой возможностью, чтобы научиться этому вопросу, но из-за чувствительности ко времени требуется больше, чем просто толчок в правильном направлении.

Язык: PHP / Хранение: MySQL

Ответы [ 2 ]

4 голосов
/ 06 января 2010

Один из лучших способов - просто использовать MySQL для шифрования / дешифрования. Смотрите эти функции:

http://dev.mysql.com/doc/refman/5.1/en/encryption-functions.html

Однако имейте в виду, что, хотя это защитит вас от людей, которые могут найти способ прочитать вашу базу данных, оно не защитит от того, кто владеет сервером. Это потому, что ключ расшифровки присутствует на сервере.

В целом, это огромный импульс. Истинная безопасность достигается за счет шифрования с открытым ключом и дешифрования в автономном режиме с помощью защищенного личного ключа (например, другого сервера).


Как пример:

INSERT INTO BillingInfo 
SET CCard = AES_ENCRYPT('4111...', 'super-secret-key')
...

и

SELECT 
AES_DECRYPT(CCard, 'super-secret-key') 
...

Специфическая функция описана здесь:
http://dev.mysql.com/doc/refman/5.1/en/encryption-functions.html#function_aes-encrypt

Для получения дополнительной информации об AES, см.
http://en.wikipedia.org/wiki/Advanced_Encryption_Standard


Для максимальной безопасности в вашей среде, я предлагаю вам хранить ключ в константе PHP. Скорее всего, таким способом обнародовать во время выполнения (незначительная деталь).

0 голосов
/ 06 января 2010

Это менее «легко», но если вашему приложению не нужно считывать сохраненные кредитные карты (т.е. они читаются только другой частью системы), вы можете использовать криптографию с открытым ключом для шифрования информации таким образом, что ваше собственное веб-приложение не сможет его расшифровать.

Таким образом, даже если злоумышленник получит доступ как к базе данных, так и к собственным сценариям вашего веб-приложения, он все равно не получит данные карты. Только другая часть системы, работающая с картами (которая, вероятно, более защищена от атак), может их расшифровать.

Вы бы начали с функции openssl_public_encrypt . пример использования

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...