В настоящее время у меня есть приложение PHP, которое использует шифрование данных в состоянии покоя для хранения конфиденциальной информации в базе данных, которую я могу позже расшифровать для использования в своем приложении.
Вот текущий код, который я использую. Я знаю... я знаю... это не очень безопасно, но отлично работает для того, для чего я его использую. Я не храню номера кредитных карт, номера социального страхования или что-то в этом роде. В основном только имена и адреса.
define('CRYPTO_KEY', 'some-key');
function decrypt($val){
$val = urlencode($val);
$data = base64_decode(urldecode($val));
$iv = substr($data, 0, mcrypt_get_iv_size(MCRYPT_RIJNDAEL_128, MCRYPT_MODE_CBC));
$val = rtrim(
mcrypt_decrypt(
MCRYPT_RIJNDAEL_128,
hash('sha256', CRYPTO_KEY, true),
substr($data, mcrypt_get_iv_size(MCRYPT_RIJNDAEL_128, MCRYPT_MODE_CBC)),
MCRYPT_MODE_CBC,
$iv
),
"\0"
);
return $val;
}
function enc($val){
$iv = mcrypt_create_iv(
mcrypt_get_iv_size(MCRYPT_RIJNDAEL_128, MCRYPT_MODE_CBC),
MCRYPT_DEV_URANDOM
);
$val = urlencode(base64_encode(
$iv .
mcrypt_encrypt(
MCRYPT_RIJNDAEL_128,
hash('sha256', CRYPTO_KEY, true),
$selection,
MCRYPT_MODE_CBC,
$iv
)
));
return $val;
}
Проблема, с которой я сталкиваюсь, заключается в том, что я только что обновился с PHP 5.5 до PHP 7.1. Теперь в PHP 7.1 моя функция шифрования/дешифрования выдает массу предупреждений о том, что следующие функции устарели:
- mcrypt_get_iv_size()
- mcrypt_create_iv()
- mcrypt_encrypt()
- mcrypt_decrypt()
Я провел небольшое исследование и обнаружил, что новые рекомендации заключаются в использовании таких библиотек, как libsodium или OpenSSL, найденных ЗДЕСЬ
Я изучил оба, но документация слишком техническая для меня, чтобы понять. Я даже не могу понять, как установить libsodium, не говоря уже о том, чтобы его использовать.
Мой вопрос: есть ли у кого-нибудь достойная функция шифрования/дешифрования, совместимая с PHP 7.1 или выше, которой они хотели бы поделиться?
А еще лучше, может ли кто-нибудь дать инструкции о том, как использовать libsodium или OpenSSL для шифрования/дешифрования данных?
К сведению: в настоящее время я использую платформу общего хостинга с cPanle. У меня установлен композитор и я понимаю, как через него устанавливать пакеты. Я никогда не использовал PECL или PEAR