в поисках простого метода многофакторного шифрования PHP

Мне нужно расшифровать зашифрованные строки значения POST с помощью секретного статического ключа.

Я заглянул в crypt () (но он только односторонний) и Mcrypt, GnuPG, ... но я не доволен ими. Я думаю, что они сложны для моей простой проблемы. Что я должен использовать? Мне не нужны IV-формы или сверхбезопасные алгоритмы. Есть ли какая-нибудь базовая функция PHP, которую я еще не знаю?

Мне просто нужно скрыть изображения от пользователей, как это: ImageJPEG (ImageCreateFromJPEG (декодировать ($ _ REQUEST ['encryptedImage'], 'секретный ключ')));

 Tom10 мая 2012 г., 17:09
простое решение Mcrypt: функция simple_encrypt ($ text, $ salt) {возврат трима } Функция simple_decrypt ($ текст, $ соль) {возвращение подрезать (mcrypt_decrypt (MCRYPT_RIJNDAEL_256, $ соль, base64_decode ($ текста), MCRYPT_MODE_ECB, mcrypt_create_iv (mcrypt_get_iv_size (MCRYPT_RIJNDAEL_256, MCRYPT_MODE_ECB), MCRYPT_RAND))); }

Ответы на вопрос(3)

Вы можете просто обернуть встроенные функции, чтобы сделать их более дружелюбными. Как во втором посте пользователя на странице документа для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);
 Tom10 мая 2012 г., 17:27
секретного ключа нет, так что каждый может его расшифровать.
 10 мая 2012 г., 17:42
@ Да, я только предложил это, так как ОП хотел скрыть пути к изображениям, я не думаю, что просто смотрю на строку, вы сразу узнаете, что она прошла через str_rot13. Я бы предложил написать собственную функцию поворота, но подумал, что я бы предложил самый основной вариант.
Решение Вопроса
Update (27/09/17):

посколькуmcrypt_encrypt УСТАРЕЛО сPHP 7.1.0, Я добавил простое шифрование / дешифрование с помощью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";

Original Answer:

Не может быть проще, чем это:(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));
}

?>
 14 дек. 2017 г., 13:32
Расшифруйте это:U09DUlR5TllGbXNKdVRWVHg2ZnNCQT09 используя вышеуказанные функции.
 23 авг. 2013 г., 15:49
Также не может стать гораздо более уязвимым, чем он. Давайте посмотрим. Использование ECB (большой нет-нет). Использование Rijndael 256 вместо 128 (что будет AES). Не проверять подлинность. Не дополняет. Да уж. Так что нет ... не делай этого. Просто используйте библиотеку (Zend\Crypt\BlockCipher отличный выбор).

Ваш ответ на вопрос