Способы шифрования строки php

243
06 мая 2018, 18:54

Можете посоветовать способы шифрования на примерах php? Интересует вариант описанный тут https://ru.stackoverflow.com/a/480782/222744 ,насколько надежный этот вариант. Есть ли способы надежней,лучше?Так же интересует способ повторного шифрования зашифрованной строки ,тем же методом,но другим ключем ?

Answer 1

Надежное обратимое шифрование по шестнадцатеричному ключу.

// 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);
Answer 2

Мне нравиться надёжный PGP, пускаю system gpg и всё окей.

php

$command  = "./шифрануть '$message'" ;
exec($command,$encrypted,$errorCode);

шифрануть

echo $1 | gpg2 --yes --always-trust --encrypt --armor --recipient КлючМойДома
READ ALSO
Реализация cdn font

Реализация cdn font

Как реализовать cdn font для сайта или существует ли пакет( packagist )?

220
Как разделить переменную из цикла на другую переменную?

Как разделить переменную из цикла на другую переменную?

В php новичок, как можно разделить i-тую переменную из цикла на другую переменную? В моем случае $row[2] на $hТ

207
Объединить ajax

Объединить ajax

Имеется много ajax на разных страницахМожно ли сделать так чтобы постоянно не писать ajax для каждой формы, а сделать что-то универсальное

231
Чат с websocket

Чат с websocket

на сайте https://mhabr

230