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

Рейтинг: 3Ответов: 3Опубликовано: 04.04.2015

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

Ответы

▲ 6Принят

На пальцах вот так, просто использовать расширение 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 ] )
▲ 2

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

▲ 2

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

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');