PHP Как расшифровать сообщение mysql которое зашифрованно с помощью mc_encrypt?
я сделал шифровку сообщений зашифрованное сообщение отправляется в базу данных в столбец message который находится в таблице messages теперь я не пойму как сделать дешифровку Код для шифровки сообщения и отправки в базу
$message = stripslashes($message);//удал¤ем обратные слеши
$message = htmlspecialchars($message);//преобразование спецсимволов в их HTML эквиваленты
define('ENCRYPTION_KEY', 'yourkey'); // Ключ шифровки сообщений
$message = mc_encrypt($message, ENCRYPTION_KEY);
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;
}
$mesres = mysql_query("INSERT INTO messages (sender, receiver, message, date) VALUES ('$sender','$receiver','$message','$date') ",$db);
Код для дешифровки сообщений:
define('ENCRYPTION_KEY', 'yourkey'); // Ключ
// 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;
}
Код для вывода сообщений и отправки сообщений с профиля:
if($_SESSION['id'] == $myrow['id']){
echo "Привет ".$myrow['login'];
echo "<br>";
echo "Личные сообщения:";
$receiver = $myrow['login'];
$tmp = mysql_query("SELECT * FROM messages WHERE receiver='$receiver' ORDER BY id DESC",$db);
$messages = mysql_fetch_array($tmp);//извлекаем сообщения пользователя, сортируем по идентификатору в обратном порядке, т.е. самые новые сообщения будут вверху
echo "
<table>
<tr>
<td>Автор: ".$messages['sender']."<br>
Дата: ".$messages['date']."<br>
Сообщение: ".$messages['messeage']."
<br>
<br>
</td>
</tr>
</table><br>";
} else {
echo "Ты попал на страницу юзера ".$myrow['login'];
echo "
<br>
<form action='sended.php?id=".$myrow['id']."' method='post'>
<textarea name='message' placeholder='Напишите что нибудь крутое'></textarea>
<input type='hidden' name='receiver' value='".$myrow['login']."'>
<input type='hidden' name='id' value='".$myrow['id']."'>
<button type='submit' name='submited'>Отправить</button>
</form>
";
}
Ответы (1 шт):
Автор решения: Celestine
→ Ссылка
Предположу, что для дешифровки достаточно сделать это:
"Сообщение: ". mc_decrypt($messages['messeage']) . ""