Можете посоветовать способы шифрования на примерах php? Интересует вариант описанный тут https://ru.stackoverflow.com/a/480782/222744 ,насколько надежный этот вариант. Есть ли способы надежней,лучше?Так же интересует способ повторного шифрования зашифрованной строки ,тем же методом,но другим ключем ?
// Encrypt Function
function mc_encrypt($encrypt, $key) {
$encrypt = serialize($encrypt);
$iv = mcrypt_create_iv(mcrypt_get_iv_size(MCRYPT_RIJNDAEL_256, MCRYPT_MODE_CBC), MCRYPT_DEV_URANDOM);
$key = pack('H*', $key);
$mac = hash_hmac('sha256', $encrypt, substr(bin2hex($key), -32));
$passcrypt = mcrypt_encrypt(MCRYPT_RIJNDAEL_256, $key, $encrypt.$mac, MCRYPT_MODE_CBC, $iv);
$encoded = base64_encode($passcrypt).'|'.base64_encode($iv);
return $encoded;
}
// Decrypt Function
function mc_decrypt($decrypt, $key) {
$decrypt = explode('|', $decrypt.'|');
$decoded = base64_decode($decrypt[0]);
$iv = base64_decode($decrypt[1]);
if(strlen($iv)!==mcrypt_get_iv_size(MCRYPT_RIJNDAEL_256, MCRYPT_MODE_CBC)){ return false; }
$key = pack('H*', $key);
$decrypted = trim(mcrypt_decrypt(MCRYPT_RIJNDAEL_256, $key, $decoded, MCRYPT_MODE_CBC, $iv));
$mac = substr($decrypted, -64);
$decrypted = substr($decrypted, 0, -64);
$calcmac = hash_hmac('sha256', $decrypted, substr(bin2hex($key), -32));
if($calcmac!==$mac){ return false; }
$decrypted = unserialize($decrypted);
return $decrypted;
}
Пример использования:
define('ENCRYPTION_KEY', md5(microtime() . rand(0, 9999)));
$txt = 'Обратимое шифрование на php';
$encrypted = mc_encrypt($txt, ENCRYPTION_KEY);
$decrypted = mc_decrypt($encrypted, ENCRYPTION_KEY);
Мне нравиться надёжный PGP, пускаю system gpg и всё окей.
php
$command = "./шифрануть '$message'" ;
exec($command,$encrypted,$errorCode);
шифрануть
echo $1 | gpg2 --yes --always-trust --encrypt --armor --recipient КлючМойДома
Сборка персонального компьютера от Artline: умный выбор для современных пользователей