@nikita071003

Как закодировать переменную, отправить в бд. Затем получить и раскодировать обратно?

Здравствуйте, нужна помощь с php:

Пишу api. В него приходит 3 переменных - $a, $code, $b.
Нужно закодировать code. Делаю это через OpenSSL:

define('ENCRYPTION_KEY', 'ТУТ КОД ШИФРОВАНИЯ')

$ivlen = openssl_cipher_iv_length($cipher="AES-128-CBC");
$iv = openssl_random_pseudo_bytes($ivlen);
$ciphertext_raw = openssl_encrypt($code, $cipher, ENCRYPTION_KEY, $options=OPENSSL_RAW_DATA, $iv);
$hmac = hash_hmac('sha256', $ciphertext_raw, ENCRYPTION_KEY, $as_binary=true);
$ciphertext = base64_encode( $iv.$hmac.$ciphertext_raw );


$ciphertext - отправляю в бд, вместе с $a $b.

Получаю json

{"messages_dike":[{"id_message":"15","who_sent":"ЧТО-ТО","who_get":"ЧТО-ТО ЕЩЕ","message_text":"ЗАШИФРОВАННЫЙ ТЕКСТ","message_type":"1","message_datetime":"2020-09-04 05:00:00"},{"id_message":"16","who_sent":"ЧТО-ТО","who_get":"ЧТО-ТО ЕЩЕ","message_text":"ЗАШИФРОВАННЫЙ ТЕКСТ","message_type":"1","message_datetime":"2020-09-04 07:00:00"}]}

message_text - и есть тот самый $code. Его нужно расшифровать и вывести на страничку в json формате, далее Android приложение его забирает и обрабатывает.

Я зашифровал $code, отправил. Запросил, получил обратно, вывел json. А расшифровать обратно я не смог
  • Вопрос задан
  • 87 просмотров
Решения вопроса 1
sam002
@sam002
Линуксойд, кодер, немного физик.
Как бы из документации прям, второй пример: https://www.php.net/manual/en/function.openssl-enc...

$c = base64_decode($ciphertext);
$ivlen = openssl_cipher_iv_length($cipher="AES-128-CBC");
$iv = substr($c, 0, $ivlen);
$hmac = substr($c, $ivlen, $sha2len=32);
$ciphertext_raw = substr($c, $ivlen+$sha2len);
$original_plaintext = openssl_decrypt($ciphertext_raw, $cipher, $key, $options=OPENSSL_RAW_DATA, $iv);
$calcmac = hash_hmac('sha256', $ciphertext_raw, $key, $as_binary=true);
if (hash_equals($hmac, $calcmac))//PHP 5.6+ timing attack safe comparison
{
    echo $original_plaintext."\n";
}

Сохраняйте только весь $ciphertext
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы
ЭТП «ТОРГИ 223» Нижний Новгород
от 50 000 ₽
Сбер Москва
До 240 000 ₽
RecruitIT Москва
от 120 000 до 150 000 ₽