Расшифровка приватным ключем

130
01 октября 2019, 01:10

Получаю ответ по апи дешифрую их и вот что на выходе получается:

$value = "W9g/l6UH6L0cYpA8GZML2eFTJQPkALvr/npCR3YWovIUsAZNOJMu3FWRlNyEb/YS0MZTpwpKZQPc8q9L7+cUQfdEa/QGdieW+qz8H6aZ1BTYzp4so4Rn0giSNOAbZHOV";
$key   = hex2bin("e0454a719e54a32d5f1f2877f356fceb");
$method = "AES-128-CBC";
$decryptedData = openssl_decrypt(base64_decode($value), $method, $key, 0, $iv);

Загвоздка состоит в том что передавать в $iv, c шифрованием столкнулся недавно, поэтому совсем зеленый в этом деле

Answer 1

$iv - это какой-то текст. Этот вектор используется для того, чтобы одно и те же данные в зашифрованном виде выглядели по-разному. Например, если кто-то как-то узнает, что фамилия "Петров" в зашифрованном виде выглядит как "ZML2eFTJQPkA", то без $iv легко найдут всех остальных Петровых, если шифрование глобальное. Да и вообще тогда смогут расшифровать все данные. Поэтому в идеале для каждой строки в БД должен быть свой $iv, который можно хранить там же. Генерируйте его рандомно. Для примера

//salt получаем $salt=bin2hex(random_bytes(8));
function my_crypt($salt, $password, $data_to_crypt)
{
    $method='AES-256-CTR';
    $crypt_key=my_hash_pbkdf2($salt, $password);
    $options=true;
    $iv=$salt; //для наглядности
    return bin2hex(openssl_encrypt($data_to_crypt, $method, $crypt_key, $options, $iv));
}
function my_decrypt($salt, $password, $data_to_decrypt)
{
    $data=hex2bin($data_to_decrypt);
    $method='AES-256-CTR';
    $crypt_key=my_hash_pbkdf2($salt, $password);
    $options=true;
    $iv=$salt; //для наглядности
    return openssl_decrypt($data, $method, $crypt_key, $options, $iv);  
}
function my_hash_pbkdf2($salt, $password)
{
    $algo='sha256';
    $iterations=100;
    $length=32;
    $raw_output=true;
    return hash_pbkdf2($algo, $password, $salt, $iterations, $length, $raw_output);
}

Если у вас php от 7.2 включительно, то используйте Sodium

READ ALSO
Как вытащить нужное значение из запроса?

Как вытащить нужное значение из запроса?

Когда боту приходит фотография в сообщении, он выдает такой результат запроса:

138
Имитация браузера через curl

Имитация браузера через curl

Дайте подсказкуДелаю парсер

129
Отладка с помощью gdbserver

Отладка с помощью gdbserver

Иногда возникает необходимость удаленной отладки и сдесь не обойтись без gdbserver, но есть одна проблема: исходникиЧтобы gdb видел исходники,...

105
Манифест в проект С++(VIsual Studio)

Манифест в проект С++(VIsual Studio)

Как добавить файл манифеста в проект, но при этом так, чтобы в директории, где находится exe не обязательно должен быть exemanifest

100