Как правильно зашифровать номер телефона на php приватным ключом и расшифровать на клиенте?

Как правильно зашифровать номер телефона на php приватным ключом и расшифровать на клиенте?

пример - am.ru
  • Вопрос задан
  • 1093 просмотра
Пригласить эксперта
Ответы на вопрос 3
xmoonlight
@xmoonlight
https://sitecoder.blogspot.com
Всё чуть сложнее, чем кажется.
1. Посли реги клиента мы определяем его клиентский идентификатор (CID; на основе браузера и подсети провайдера, к примеру)
2. Записывем его в базу на сервере и присылаем линк подтверждения регистрации на почту. Линк содержит криптованный клиентский ключ (серверным ключом, ключ для каждого клиента - генерируется свой).
3. После перехода по линку мы проверяем, что это действительно то устройство и наш пользователь, и присылаем ключ для дешифровки ключа и сохраняем его в браузер (Cookies или LocalStorage).
4. В момент загрузки закрытых данных (на сервере - они закрываются ключом авторизованного клиента), через JS мы берём ключ из хранилища браузера и дешифруем: пользователь видит чистые текстовые данные.

На любые "закрытые" данные нужно иметь всегда 2 ключа на их чтение: пользовательский и публичный.

Пользовательский - когда юзер залогинен.
Публичный - для всех, кто не залогинен. Он обычно НЕ используется, но если захотите какие-то данные открыть позже - нужно это предусмотреть заранее!

Как-то так...
Ответ написан
@Xveeder
Такая защита на раз обходится headless-браузерами или тем же Selenium, через которые страница будет рендериться.

Ограничение на парсинг, регинг, постинг и т.д. работает только в виде увеличения стоимости сихьдействий, а именно:

1. Капчи на возврат данных. Даже простые капчи заставляют парсеры отправлять их в специальные сервисы, которые сильно увеличивают стоимость процесса.

2. Ограничения парсинга по ip. Прокси-сервера стоят по 50-100 рублей за штуку. И если боту придется менять прокси каждые 100 запрсов. Юзер 100 раз подумает, а стоит ли парсить или нет.
Ответ написан
ixon
@ixon

Можно использовать эту имплементацию RSA для PHP:
phpseclib.sourceforge.net
<?php
include('Crypt/RSA.php');

$privatekey = file_get_contents('private.key');

$rsa = new Crypt_RSA();
$rsa->loadKey($privatekey);

$plaintext = new Math_BigInteger('+7 800 200 0000');
echo $rsa->_exponentiate($plaintext)->toBytes();
?>
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы