Вопрос по encryption, php – в поисках простого метода многофакторного шифрования PHP

2

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

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

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

простое решение 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))); } Tom

Ваш Ответ

3   ответа
0

Вы можете просто обернуть встроенные функции, чтобы сделать их более дружелюбными. Как во втором посте пользователя на странице документа для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();
?>
0

Это единственная базовая встроенная функция, о которой я знаю.

$string = "/path/img.jpg";

$scramble = str_rot13($string);

echo "<p>Scrambled: ".$scramble;

echo "<p>Unscrambled: ".str_rot13($scramble);
секретного ключа нет, так что каждый может его расшифровать. Tom
@ Да, я только предложил это, так как ОП хотел скрыть пути к изображениям, я не думаю, что просто смотрю на строку, вы сразу узнаете, что она прошла через str_rot13. Я бы предложил написать собственную функцию поворота, но подумал, что я бы предложил самый основной вариант.
4

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));
}

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

Похожие вопросы