Как зашифровать строку в PHP?

168
20 апреля 2018, 14:57

Как зашифровать любой текст по ключу, то есть не имея ключ текст невозможно будет расшифровать. Объясните пожалуйста на пальцах, как это сделать?

Answer 1

На пальцах вот так, просто использовать расширение mcrypt:

Зашифровать.

http://php.net/manual/ru/function.mcrypt-encrypt.php

string mcrypt_encrypt ( string $cipher , string $key , string $data , string $mode [, string $iv ] )

Расшифровать.

http://php.net/manual/ru/function.mcrypt-decrypt.php

string mcrypt_decrypt ( string $cipher , string $key , string $data , string $mode [, string $iv ] )
Answer 2

Самый доступный и очевидный вариант - XOR шифрование. Если завести определенный ключ(строку) и xor`ить каждый символ исходной строки на [string.index % key.length] символ ключа, то получится, что для произведения обратной операции( расшифровки ), необходимо будет иметь ключ.

Answer 3

Вот так просто использовать голый mcrypt правильно (то есть чтобы шифрование было стойкое) - не простая задача. Для каждого алгоритма есть свои правильные параметры.

Поэтому вот ссылка на пример кода в котором реализовано AES-128 шифрование https://stackoverflow.com/questions/1788150/how-to-encrypt-string-in-php/19445173#19445173

В банке такое шифрование, конечно, использовать нельзя, но даже для инет-магазина подойдёт.

Answer 4

Можете рассмотреть вот такое решение:

function __encode($text, $key)
{
    $td = mcrypt_module_open ("tripledes", '', 'cfb', '');
    $iv = mcrypt_create_iv (mcrypt_enc_get_iv_size ($td), MCRYPT_RAND);
    if (mcrypt_generic_init ($td, $key, $iv) != -1) 
        {
        $enc_text=base64_encode(mcrypt_generic ($td,$iv.$text));
        mcrypt_generic_deinit ($td);
        mcrypt_module_close ($td);
        return $enc_text;
        }       
}
function strToHex($string)
{
    $hex='';
    for ($i=0; $i < strlen($string); $i++)
    {
        $hex .= dechex(ord($string[$i]));
    }
    return $hex;
}
function __decode($text, $key)
{        
        $td = mcrypt_module_open ("tripledes", '', 'cfb', '');
        $iv_size = mcrypt_enc_get_iv_size ($td);
        $iv = mcrypt_create_iv (mcrypt_enc_get_iv_size ($td), MCRYPT_RAND);     
        if (mcrypt_generic_init ($td, $key, $iv) != -1) {
                $decode_text = substr(mdecrypt_generic ($td, base64_decode($text)),$iv_size);
                mcrypt_generic_deinit ($td);
                mcrypt_module_close ($td);
                return $decode_text;
        }
}
public function hexToStr($hex)
{
    $string='';
    for ($i=0; $i < strlen($hex)-1; $i+=2)
    {
        $string .= chr(hexdec($hex[$i].$hex[$i+1]));
    }
    return $string;
}

Зашифровать

$code = strToHex(__encode($str, 'your key'));

Расшифровать

$str = __decode(hexToStr($code), 'your key');
READ ALSO
Почему сначала идёт квадратная скобка, а потом запятая?

Почему сначала идёт квадратная скобка, а потом запятая?

string trim ( string $str [, string $character_mask = " \t\n\r\0\x0B" ] )

206
Не заходит в manager после переноса modx revo

Не заходит в manager после переноса modx revo

Здравствуйте, перенес сайт modx revo на новый хостингСайт работает а при вводе Правильного логина и пароля в /manager/ просто обновляется страница

212