提问:
密码正确显示:用户名或密码长度不高
网友回答:
应该是字打少了,重新试一下用户名或密码。
1、程序是给可以预计到的情况来写的,如果不限制长度,会很危险,包括缓存区溢出攻击:
恶意用户输入的字符串比预计的要长,在基于堆栈的语言(C++/Java)中,太长的对象可能会溢出到其他程序的区域,通过刻意构造一个字符串,可以获取程序的一部分权限。
2、太短会被破解,太长用户会忘记。
3、由于MD5将任意长度的“字节串”映射为一个128bit的大整数,而反过来由大整数破解密码很难,但是要知道,任意长度到128bit,就类似11个苹果装在10个盒子里,必然有一个盒子装了两个苹果。这就是Md5碰撞,允许过长的密码,就能够充分的找到碰撞,对于密码验证恰恰是不好的。
4、虽然是这样,不过现代的网站既然已经能够使用发帖这样的功能,说明几万字的文字是完全可以的,我猜测这个时候限制密码长度是为了提高网站的效率。明文存储要求更大的空间、发送更长的请求,hash存储时的计算量,验证时大约O(n)的复杂度等等。还是要参考第一句话:程序是给可以预计到的情况来写的。