发布时间:2025-08-22 11:59:37 点击量:
HASH GAME - Online Skill Game GET 300
比如10位,允许数字、字母大小写的密码,一共有(10+26+26)^10~=84亿亿种可能,记录非常之多难以用查询表全部保存起来。这时候黑客会用一种叫做彩虹表的技术来破解,彩虹表用了典型的计算机世界里解决问题的思路,时间空间妥协。在这个例子里面,空间不够,那就多花一些时间。在彩虹表中,可以将全部的sha256值转化为长度相同的若干条hash链,只保存hash链的头和尾,在破解的时候先查询得到sha256存在于哪条hash链中,然后计算这一条hash链上的所有sha256,通过实时比对来破解用户密码。
首先如果你不是一个密码学专家,你很难设计出一个安全的hash算法。不服气的话,你可以再看一遍上面我关于Cryptographic Hash的描述,然后想一想自己怎么设计一个算法可以满足它的全部四种特性。就算你是基于已有的Cryptographic Hash的基础上去设计,设计完之后,也难以保证新算法仍然满足Cryptographic Hash的要求。而一旦你的算法不满足安全要求,那么你给了黑客更多更容易破解用户密码的方法。
Cryptographic Hash并不是为了加密密码而设计的,它计算非常快的这个特性,在其他应用场景中非常有用,而在现在的计算机硬件条件下,用来加密密码就显得不合适了。针对这一点,密码学家们设计了PBKDF2、BCRYPT、SCRYPT等用来加密密码的Hash算法,称作Password Hash。在他们的算法内部,通常都需要计算Cryptographic Hash很多次,从而减慢Hash的计算速度,增大黑客暴力破解的成本。可以说Password Hash有一条设计原则,就是计算过程能够按要求变慢,并且不容易被硬件加速。