我正在研究一些代码,并且在某些时候它正准备将密码存储在数据库中。在粗糙的伪代码中,它正在执行以下操作:
encrypted_password = truncate(hash(password), 14)
即。计算密码的哈希值,然后将哈希值截断为14个字符。
有谁知道为什么应用程序会以这种方式截断哈希值?这是非常慎重的,所以我怀疑它是否与我不知道的一些相当标准类型的密码存储兼容。
(请忽略这不是存储密码,没有盐渍等的好方法。)
答案 0 :(得分:2)
我能想到的唯一原因是保持与某些遗留系统的兼容性。事实上,这是我能够想到在任何情况下做出有意识的牺牲安全决定的唯一原因。
例如,考虑一个具有疯狂旧UNIX盒的网络,它只能使用经典crypt()函数的八个字符密码。为了让他们对其他系统执行身份验证,或者让其他系统对这些遗留的UNIX系统执行身份验证,每个人都必须使用相同的方法来操作身份验证数据。
事实上,通过网络传输密码(散列,散列+盐渍或其他)的唯一原因是为了遵守旧系统或系统,否则我会称之为“遗留要求”。对于在安全意义上相对较弱的系统也是如此。