Я буду предоставлять ключи API для сайтов моих партнеров, и они будут использовать код, который я им даю, для генерации "токенов".
эти токены будут автоматически присутствовать в формах, которые пользователи сайтов-партнеровнажмите и перейдите на мой сайт.когда они дойдут до моего сайта, мне нужно будет подтвердить, что они действительно пришли с партнерского сайта.
как мне это проверить?apikey будет секретным, но то, что представлено в форме, НЕ будет, поэтому у умных пользователей не должно быть возможности перепроектировать мой алгоритм.
EDITA
Option1:Я получаю страницу клиента для отправки через md5 ($ apikey. $ Time) и $ time (в виде открытого текста).Когда я его получаю, я использую время и свою копию apikey для генерации md5 ($ apikey. $ Time).если он совпадает и находится в течение 1 часа (или чего-то еще), я разрешаю выполнение запроса.
Опция 2: у меня уже есть $ userid, также поступает $ requestcommandoption.Я могу сделать следующее:
$input = $userid.'-'.$requestcommandoption.'-'.$time;
$encrypted_data = mcrypt_ecb (MCRYPT_3DES, $apikey, $input, MCRYPT_ENCRYPT);
когда я получу его на своем конце, я могу сделать:
$decrypted_data = mcrypt_ecb (MCRYPT_3DES, $apikey, $encrypted_data, MCRYPT_DECRYPT);
и затем проверить 2 входа, если они одинаковы, и3-й, если в течение 1 часа?
EDITB
Насколько безопасен этот звук?(код заимствован из http://onlamp.com/pub/a/php/2001/07/26/encrypt.html?page=3)
// on client
$apikey="test123";
$userid = '577';
$requestcommandoption = 'delete-all';
$time = mktime();
echo "time = $time<p>";
$input = $userid.'-'.$requestcommandoption.'-'.$time;
// Encryption Algorithm
$cipher_alg = MCRYPT_RIJNDAEL_128;
// Create the initialization vector for added security.
$iv = mcrypt_create_iv(mcrypt_get_iv_size($cipher_alg, MCRYPT_MODE_ECB), MCRYPT_RAND);
// Encrypt $string
$encrypted_string = mcrypt_encrypt($cipher_alg, $apikey, $input, MCRYPT_MODE_CBC, $iv);
$transmitted = bin2hex($encrypted_string);
// sent from client to server
print "Encrypted string: ".$transmitted."<p>";
// received on server
$encrypted_string = pack("H*" , $transmitted);
$decrypted_string = mcrypt_decrypt($cipher_alg, $apikey, $encrypted_string, MCRYPT_MODE_CBC, $iv);
print "Decrypted string: $decrypted_string";