Я уже читал об этой теме в интернете, но смог найти способы, при которых он работал только для 2 строк одинаковой длины. В большинстве случаев это выглядело примерно так:
string userinput;
string password;
int falsekey = 0;
if(userinput.length != password.length){
return 1;
}
for(i = password.length-1; i>=0; i--){
falsekey |= userinput[i] ^ password[i];
}
return falsekey;
Но это имеет только сравнение строк с постоянным временем, если две строки имеют одинаковую длину. Поэтому, если кто-то ищет длину правильного пароля, вы можете легко найти его с помощью временной атаки.
Я пытался придумать, как это исправить. Может быть, посмотрев на длину пользовательского ввода.
Если эта длина меньше длины пароля, добавьте случайные символы в строку ввода пользователя, пока она не будет иметь такую же длину пароля, а затем запустите цикл for в коде.
Если эта длина превышает длину пароля, удалите символы из строки ввода пользователя, пока она не будет иметь такую же длину пароля, а затем запустите цикл for в коде.
Но тогда я думаю, что возникнет проблема, потому что в редких случаях, путем добавления случайных символов, программа может случайно добавить те символы, которые дают пользователю правильный ввод, хотя он был неправильным ...: /
Но как еще эта работа может иметь две разные длины?