Mcrypt обьявлен устаревшим в 7.1.0? Что на замену?

WMix

герр M:)ller
Партнер клуба
по основной проблеме https://dev.mysql.com/doc/refman/5.5/en/encryption-functions.html
а ключик можно вообще не хранить, ключик это кука клиента, создаваемая функцией на сервере, на основе пароля при авторизации. ну и про ssl не забывать, а то ключик спалишь

сразу о обратной петле думаем, забыли пароль - про данные можно тоже забыть
 

WMix

герр M:)ller
Партнер клуба
это клиент, как сделает так и будет
 

fixxxer

К.О.
Партнер клуба
ключик это кука клиента, создаваемая функцией на сервере, на основе пароля при авторизации
Очень сомневаюсь в том, что поле "email" используется только для текущего авторизованного пользователя.

Начнем с того, как сделать функцию восстановления пароля со ссылкой на email... :)
 

WMix

герр M:)ller
Партнер клуба
в таких системах лучше подумать о банальной смене пароля, те для удобства закрутить еще разок, типа кукой расшифровать пароль на сервере (который константный на пользователя) и уже полученным ключом расшифровывать данные.
 

Greengo86

Новичок
а с PDO работает это? Что-то не могу никак понять?

$stmt = $con->prepare("INSERT INTO t (email, phone) VALUES (?,?)");
$stmt->bindParam(1, aes_encrypt($email, 'KEY'));
$stmt->bindParam(2, $phone);

$stmt->execute();

Что выдаёт:
Uncaught Error: Call to undefined function aes_encrypt()
 

WMix

герр M:)ller
Партнер клуба
PHP:
$stmt = $con->prepare("INSERT INTO t (email, phone) VALUES ( aes_encrypt(?, ?),?)");
$stmt->bindParam(1, $email)
$stmt->bindParam(2, 'KEY')
$stmt->bindParam(3, $phone);
 

Greengo86

Новичок
$stmt = $con->prepare("INSERT INTO t (email, phone) VALUES ( aes_encrypt(?, ?),?)");
$stmt->bindParam(1, $email)
$stmt->bindParam(2, 'KEY')
$stmt->bindParam(3, $phone);
Если ещё и $phone нужно зашифровать, то:
$stmt = $con->prepare("INSERT INTO t (email, phone) VALUES ( aes_encrypt(?, ?), ?, ?)");
$stmt->bindParam(1, $email);
$stmt->bindParam(2, 'KEY');
$stmt->bindParam(3, $phone);
$stmt->bindParam(4, 'KEY');

Но всё равно не работает:
Fatal error: Uncaught Error: Cannot pass parameter 2 by reference
 

Greengo86

Новичок
$key = 'JKKISJXMZMZX9938UHHF33H32JD32LZX';

if(isset($_POST['email'])) {

$email = htmlspecialchars($_POST['email']);

} else exit ('Поле email обязательно для заполнения');

$phone = htmlspecialchars($_POST['phone']);

$stmt = $con->prepare("INSERT INTO t (email, phone) VALUES ( aes_encrypt(?, ?),?)");
$stmt->bindParam(1, $email);
$stmt->bindParam(2, $key);
$stmt->bindParam(3, $phone);

Так без ошибок, но ничего не записывается в бд
 

Greengo86

Новичок
экзекутить запрос кто будет?
Извините, ребят, туплю:
$stmt = $con->prepare("INSERT INTO t (email, phone) VALUES (aes_encrypt(?, ?), aes_encrypt(?, ?))");
$stmt->bindParam(1, $email);
$stmt->bindParam(2, $key);
$stmt->bindParam(3, $phone);
$stmt->bindParam(4, $key);

$stmt->execute();

Срабатывает, но в бд оказываются:
в phone - OSM и крякозябра впереди, а в email вообще пусто
 

WMix

герр M:)ller
Партнер клуба
If you want to store these results, use a column with aVARBINARY or BLOB binary string data type. This will avoid potential problems with trailing space removal or character set conversion that would change data values, such as may occur if you use a nonbinary string data type (CHAR, VARCHAR, TEXT).
Код:
SHOW CREATE TABLE t;
 CREATE TABLE `t` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `phone` blob NOT NULL,
  `email` blob NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB ;

mysql> INSERT INTO t (email, phone) VALUES (aes_encrypt('[email protected]', 'p@$s'), aes_encrypt('+4930458628556', 'p@$s'));
Query OK, 1 row affected (0,04 sec)

mysql> select id, aes_decrypt(email, 'p@$s') as email, aes_decrypt(phone, 'p@$s') as phone  from t;
+----+-------------+----------------+
| id | email       | phone          |
+----+-------------+----------------+
|  1 | [email protected] | +4930458628556 |
+----+-------------+----------------+
1 row in set (0,02 sec)
 
Сверху