Мне нужно расшифровать зашифрованные строки значения POST с помощью секретного статического ключа.
Я посмотрел на crypt () (но это только односторонний) и Mcrypt, GnuPG, но я не доволен ими. Я думаю, что они сложны для моей простой проблемы. Что я должен использовать? Мне не нужны формы IV или супербезопасные алгоритмы. Есть ли какая-либо базовая функция PHP, которую я еще не знаю?
Мне просто нужно скрыть изображения от таких пользователей: ImageJPEG (ImageCreateFromJPEG (декодирование ($ _ REQUEST ['encryptedImage'], 'секретный ключ')));
Поскольку mcrypt_encrypt DEPRECATED с PHP 7.1.0 . Ive добавил простой шифровать / расшифровать с помощью openssl .
function encrypt($string, $key = 'PrivateKey', $secret = 'SecretKey', $method = 'AES-256-CBC') { // hash $key = hash('sha256', $key); // create iv - encrypt method AES-256-CBC expects 16 bytes $iv = substr(hash('sha256', $secret), 0, 16); // encrypt $output = openssl_encrypt($string, $method, $key, 0, $iv); // encode return base64_encode($output); } function decrypt($string, $key = 'PrivateKey', $secret = 'SecretKey', $method = 'AES-256-CBC') { // hash $key = hash('sha256', $key); // create iv - encrypt method AES-256-CBC expects 16 bytes $iv = substr(hash('sha256', $secret), 0, 16); // decode $string = base64_decode($string); // decrypt return openssl_decrypt($string, $method, $key, 0, $iv); } $str = 'Encrypt this text'; echo "Plain: " .$str. "\n"; // encrypt $encrypted_str = encrypt($str); echo "Encrypted: " .$encrypted_str. "\n"; // decrypt $decrypted_str = decrypt($encrypted_str); echo "Decrypted: " .$decrypted_str. "\n";
Оригинальный ответ:
Невозможно упростить следующее: (PHP <7.1.0):
<?php define('SECRET',md5('Some secret key')); function encrypt($value){ $iv_size = mcrypt_get_iv_size(MCRYPT_RIJNDAEL_256, MCRYPT_MODE_ECB); $iv = mcrypt_create_iv($iv_size, MCRYPT_RAND); return mcrypt_encrypt(MCRYPT_RIJNDAEL_256, SECRET, $value, MCRYPT_MODE_ECB, $iv); } function decrypt($value){ $iv_size = mcrypt_get_iv_size(MCRYPT_RIJNDAEL_256, MCRYPT_MODE_ECB); $iv = mcrypt_create_iv($iv_size, MCRYPT_RAND); return trim(mcrypt_decrypt(MCRYPT_RIJNDAEL_256, SECRET, $value, MCRYPT_MODE_ECB, $iv)); } ?>
Вы можете просто завершить встроенные функции, чтобы сделать их более дружелюбными. Как и во втором сообщении пользователя на странице doc для mcrypt_cbc :
<?php $stuff="String to enc/enc/dec/dec =,=,"; $key="XiTo74dOO09N48YeUmuvbL0E"; function nl() { echo "<br/> \n"; } $iv = mcrypt_create_iv (mcrypt_get_block_size (MCRYPT_TripleDES, MCRYPT_MODE_CBC), MCRYPT_DEV_RANDOM); // Encrypting function encrypt($string, $key) { $enc = ""; global $iv; $enc=mcrypt_cbc (MCRYPT_TripleDES, $key, $string, MCRYPT_ENCRYPT, $iv); return base64_encode($enc); } // Decrypting function decrypt($string, $key) { $dec = ""; $string = trim(base64_decode($string)); global $iv; $dec = mcrypt_cbc (MCRYPT_TripleDES, $key, $string, MCRYPT_DECRYPT, $iv); return $dec; } $encrypted = encrypt($stuff, $key); $decrypted = decrypt($encrypted, $key); echo "Encrypted is ".$encrypted . nl(); echo "Decrypted is ".$decrypted . nl(); ?>
Это единственная базовая встроенная функция, о которой я знаю.
$string = "/path/img.jpg"; $scramble = str_rot13($string); echo "<p>Scrambled: ".$scramble; echo "<p>Unscrambled: ".str_rot13($scramble);