【发布时间】:2019-05-02 23:18:20
【问题描述】:
我已经在互联网上阅读过有关此主题的内容,但只能找到仅适用于 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 循环。
但是我认为会有一个问题,因为在极少数情况下,通过添加随机字符,程序可能会意外添加那些为用户提供正确输入的字符,尽管它是错误的......:/
但是,如果有两种不同的长度,这还能如何工作呢?
【问题讨论】:
-
有关密码的安全性,请参阅 Information Security.SE 的 How to securely hash passwords?
标签: string security encryption cryptography comparison