Как создать двухсторонние методы кодирования/декодирования с использованием специального ключа - PHP? - программирование
Подтвердить что ты не робот

Как создать двухсторонние методы кодирования/декодирования с использованием специального ключа - PHP?

Мне нужны две функции/методы, одна для кодирования, одна для декодирования. Это не для хранения паролей. Каждый пользователь будет иметь конкретный ключ/соль для кодирования данных.

Вот как я хотел бы, чтобы он работал:

function encode($str, $key) {
    // something fancy
}

function decode($str, $key) {
    // something fancy
}

$key = $logged_in_user->get_key();
$plain = 'abc abc 123 123';
$encoded_data = encode($plain, $key);
// some_fancy_encrypted_data_that_is_really_cooooool
$decoded_data = decode($encoded_data, $key);
// abc abc 123 123

Другое дело, что каждый раз, когда я использую эту функцию, он должен возвращать то же самое каждый раз, когда я использую функцию encode с одним и тем же ключом пользователя.

Как мне это сделать?

4b9b3361

Ответ 1

$myVarIWantToEncodeAndDecode

Определите ключ (соль, бульон и т.д.): $key = "#&$sdfdfs789fs7d";

Для кодирования:

$encoded = base64_encode(mcrypt_encrypt(MCRYPT_RIJNDAEL_256, md5($key), $myVarIWantToEncodeAndDecode, MCRYPT_MODE_CBC, md5(md5($key))));

Чтобы декодировать:

$decoded = rtrim(mcrypt_decrypt(MCRYPT_RIJNDAEL_256, md5($key), base64_decode($encoded), MCRYPT_MODE_CBC, md5(md5($key))), "\0");

Примечание. mcrypt_decrypt был отключен с PHP 7.1.0. Опираясь на эту функцию крайне не рекомендуется.