SHA还让你能在不知道原始字符串的情况下对其进行比较。例如,假设Gmail遭到攻击,攻击者窃取了所有的密码!你的密码暴露了吗?没有,因为Google存储的并非密码,而是密码的SHA散列值!你输入密码时, Google计算其散列值,并将结果同其数据库中的散列值进行比较。
Google只是比较散列值,因此不必存储你的密码! SHA被广泛用于计算密码的散列值。这种散列算法是单向的。你可根据字符串计算出散列值。
但你无法根据散列值推断出原始字符串。
这意味着计算攻击者窃取了Gmail的SHA散列值,也无法据此推断出原始密码!你可将密码转换为散列值,但反过来不行。
SHA实际上是一系列算法: SHA-0、 SHA-1、 SHA-2和SHA-3。本书编写期间, SHA-0和SHA-1已被发现存在一些缺陷。如果你要使用SHA算法来计算密码的散列值,请使用SHA-2或SHA-3。当前,最安全的密码散列函数是bcrypt,但没有任何东西是万无一失的。
AMY:中国的王小云教授破解了sha和md5码,sha和md5的不可逆神话被打破。