Звучит так, будто вы пытаетесь реализовать базовую аутентификацию.Что-то попробовать (в псевдокоде; я не очень хорошо разбираюсь с Java в Интернете):
random_number = rand(1000000, 9999999);
secret = "Some random text here";
timestamp = unix_timestamp(); // Get a UNIX timestamp
user_ip = users_ip(); // Get the user's IP
setcookie("random_number", random_number); // Save the random number
setcookie("timestamp", timestamp);
setcookie("token", sha256(random_number + secret + timestamp + ip)); // Concat and hash everything to form a token
Когда вы хотите проверить, является ли случайное число действительным, просто соберите все части вместе исравните его с токеном:
random_number = getcookie("random_number");
secret = "Some random text here";
timestamp = int(getcookie("timestamp"));
user_ip = users_ip(); // Get the user's IP
token = sha256(random_number + secret + timestamp + ip);
if(unix_timestamp() - timestamp < 0 || unix_timestamp() - timestamp > timeout) {
// The token is more than an hour old; it might have been stolen.
}
if(token == getcookie("token")) {
// The user is valid
} else {
// The user is invalid
}
Этот код не позволит кому-либо подделать случайное число, убедившись, что оно получено с того же IP-адреса.Вы также можете использовать метку времени, чтобы убедиться, что сессия пользователя истекает со временем.Это не даст хакерам просто сгенерировать хорошее число и использовать его вечно.
Что касается секрета, то это случайный фрагмент текста.Он должен быть абсолютно случайным и никогда не передаваться.Это в основном делает ваши токены практически невозможными для обратного инжиниринга (в противном случае, это вопрос использования комбинаций, таких как «timestamp ip», «ip number timestamp» и т.это может быть лучше достигнуто с HMAC, но это может быть несколько излишним для того, что вы хотите сделать.Это решение будет чертовски хорошо работать как есть.
Надеюсь, это поможет.
РЕДАКТИРОВАТЬ
Следует отметить, что ваши секреты должныбыть одинаковым для проверки работоспособности.