Как зашифровать строку в PHP?
Как зашифровать любой текст по ключу, то есть не имея ключ текст невозможно будет расшифровать. Объясните пожалуйста на пальцах, как это сделать?
Источник: Stack Overflow на русском
Как зашифровать любой текст по ключу, то есть не имея ключ текст невозможно будет расшифровать. Объясните пожалуйста на пальцах, как это сделать?
На пальцах вот так, просто использовать расширение 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 ] )
Самый доступный и очевидный вариант - XOR шифрование. Если завести определенный ключ(строку) и xor`ить каждый символ исходной строки на [string.index % key.length] символ ключа, то получится, что для произведения обратной операции( расшифровки ), необходимо будет иметь ключ.
Можете рассмотреть вот такое решение:
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');