MD5 далеко не всегда уместен. Например, он бесполезен, когда нам нужно зашифровать информацию о кредитной карте, а затем расшифровать ее.
Одно из простейших решений – это модуль Mcrypt, доступный в виде РНР-расширения. Библиотека Mcrypt позволяет выполнить высокоуровневое шифрование. Mcrypt предоставляет на выбор более 30 шифров, которыми вы можете шифровать ваши данные. Для использования Mcrypt нужно перекомпилировать РНР с поддержкой Mcrypt, как это было показано в #18.
Теперь поговорим об использовании Mcrypt. Следующий сценарий показывает, как использовать Mcrypt для шифрования и дешифрования данных:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
<?php $data = "Stuff you want encrypted"; $key = "Secret passphrase used to encrypt your data"; $cipher = "MCRYPT_SERPENT_256"; $mode = "MCRYPT__M0DE_CBC"; function encrypt($data, $key, $cipher, $mode) { // Шифрование данных return (string) base64_encode ( mcrypt_encrypt ( $cipher, substr (md5 ($key) , 0,mcrypt_get_key_size ($cipher, $mode) ) , $data, $mode, substr (md5 ($key), 0, mcrypt_get_block_size ($cipher, $mode)) ) ) ; } function decrypt($data, $key, $cipher, $mode) { // Дешифрование данных return (string) mcrypt_decrypt ( $cipher, substr(md5($key),0,mcrypt_get_key_size($cipher, $mode)), base64_decode($data) , $mode, substr(md5($key),O,mcrypt_get_block_size($cipher, $mode)) ) ; } ?> |
Функции mcrypt () нужно передать следующую информацию:
• Данные, которые нужно зашифровать.
• Парольную фразу, необходимую для шифрования и дешифрования данных; она называется ключом.
• Шифр, используемый для шифрования данных, определяющий алгоритм шифрования. В сценарии используется алгоритм MCRYPT_SERPENT_25 6, но вы можете использовать другие алгоритмы, в том числе MCRYPT_TWOFISH192, MCRYPT_RC2, MCRYPT_DES и MCRYPT_L0KI97.
Примечание.
Чтобы узнать, какие шифры поддерживаются вашим сервером, прочитайте п. #8. Если расширение Mcrypt установлено, то в выводе phpinfо() в секциях Supported Cipher и Supported Modes вы увидите список поддерживаемых шифров и режимов, соответственно.
• Режим (параметр mode) используется для шифрования данных. Вы можете использовать несколько режимов, в том числе Electronic Codebook и Cipher Feedback. Данный сценарий использует Cipher Block Chaining – MCRYPT_MODE_CBC.
• Вектор инициализации, также известен как IV, или seed – дополнительный бит бинарных данных, используемый алгоритмом шифрования. Вектор инициализации делает шифр более сложным для расшифровки.
• Длину строки, необходимой для ключа и IV, которая может варьироваться шифром и блоком. Используйте функции mcrypt_get_key__size () и mcrypt_get_block_size () для нахождения соответствующей длины. Затем значение ключа нуж-но урезать до значения, возвращенного функцией mcrypt_get_ key__size(); это делается функцией substr (). Если ключ короче, чем требуемое значение, – не волнуйтесь: Mcrypt заполнит недостающие символы нулями.
Даже если кто-то завладеет данными и парольной фразой, ему еще пред-стоит подобрать нужный шифр. Для большей безопасности мы используем функцию md5 () для шифрования ключа перед его использованием, так что, даже если злоумышленник завладеет парольной фразой, он не получит того, что ожидает.
Злоумышленнику нужно знать функцию, данные и парольную фразу -и только в этом случае он, возможно, получит доступ к вашему серверу.
При использовании Mcrypt нужно учитывать одну проблему. Mcrypt возвращает данные в бинарном виде, что приводит к ошибкам при попытке их сохранить в базе данных MySQL. Поэтому мы используем функции base64encode () и base64decode () для преобразования данных в SQL-совместимый вид.
Совершенствуем сценарий
Вы можете поэкспериментировать с разными методами шифрования. Также можно сделать сценарий более удобным, объявив глобальные константы в подключаемом файле (см. #1), в которых будет храниться ключ и выбранный режим.
Источник: http://www.phpsql.ru/mcrypt-encrypt
https://corp2.info/razrabotka-i-sozdanie-sajtov-internet-magazinov-veb-proektov-kiev-1038.html
Leave a Reply