2016-11-01 4 views
-3

В настоящее время я использую openssl_encrypt для шифрования данных и возвращения значения base64. Я должен использовать шифрование AES с солью.Как шифровать с помощью openssl_encrypt с использованием AES и соли вместо Base64

Может ли кто-нибудь сказать, как реализовать шифрование AES с солью?


Вот код, я использую:

function encrypt_decrypt($action, $string) 
{ 
    $output = false; 

    $encrypt_method = "AES-256-CBC"; 
    $secret_key = 'This is my secret key'; 
    $secret_iv = 'This is my secret iv'; 

    // hash 
    $key = hash('sha256', $secret_key); 

    // iv - encrypt method AES-256-CBC expects 16 bytes 
    $iv = substr(hash('sha256', $secret_iv), 0, 16); 

    if ($action == 'encrypt') { 
     $output = openssl_encrypt($string, $encrypt_method, $key, 0, $iv); 
     $output = base64_encode($output); 
    } else if ($action == 'decrypt') { 
     $output = openssl_decrypt(base64_decode($string), $encrypt_method, $key, 0, $iv); 
    } 

    return $output; 
} 
+0

Вы не «солевое» шифрование. Ваш вопрос очень расплывчатый. Можете быть более конкретными? –

ответ

2

Всегда используйте испытанные библиотеки для таких целей. Ваше шифрование уязвимо и полностью небезопасно, потому что вы не используете IV правильно.

Рассмотрите возможность использования библиотеки defuse/php-encryption и избавитесь от того, что вы сделали.

Почему то, что вы сделали неправильно:

  • Тот же IV (вектор инициализации) используется.
  • Там нет соли шифрования, это называется Initialization Vector и должны быть разными каждый раз, когда вы шифровать - ваш IV всегда одинаково
  • Когда шифрование будет сделано, вы должны доставить зашифрованные данные и IV - вы не возвращаете IV с результатом шифрования, только результат.

В настоящее время вы не делаете то, что я изложил, поэтому вы должны потратить свое время на использование библиотеки, которая позаботится о шифровании, чтобы вы не развертывали свою собственную, небезопасную реализацию. Я намеренно не отправил код, необходимый для этого шифрования, чтобы работать из-за страха, что кто-то его будет использовать, а не библиотеки, с которой я связан. Всегда используйте библиотеки, созданные другими людьми, если вы не знаете, что делаете.