如何制作安全的填空密码系​​统?

时间:2015-04-17 11:27:51

标签: php security passwords password-protection password-encryption

我正在开发一个php登录系统,我想知道如何制作一个安全的密码输入系统,要求说出密码的第1,第2和第8个字符,就像许多网上银行系统一样。怎么能让这个将密码存储为双盐水哈希?

2 个答案:

答案 0 :(得分:1)

我想到的一个想法是将密码的每个字符存储在单独的字段或序列化中:

<强>伪代码:

$ password是用户密码,$ secret_word是用于检查单个字符的单词

function get_hashed_characters($password, $secret_word) {
    $char_store = ""

    for every character $char in $secret_word
        $hashed_char = some_hash_function($char + $password)
        $hash_store = $char_store + $hashed_char

    return $hash_store
}

function check_hashed_char($password, $hash_store, $char_index, $char) {
    if len($hash_store) < $char_index * $HASH_LEN + $HASH_LEN return false

    $hashed_char = substr($hash_store, $char_index * $HASH_LEN, $HASH_LEN)

    return true if $hashed_char is equals to some_hash_function($char + $password), false otherwise
}

更新:正如C4ud3x指出的那样,我将要存储的字符哈希与密码连接

这是一个完全不同的解决方案,有时在Linux系统上使用:Challenge-Response authentication

答案 1 :(得分:0)

汇丰在其网站上使用这种密码系统:website

并在他们的应用中:App)*

与他们联系后,他们说:

  

确保我们系统的安全性并将继续是我们的首要任务。

     

发送到我们系统的所有详细信息都是加密的   使用高加密级别。只要你保持登录   信息保密,我们可以向您保证该服务是安全的。如   您将欣赏,我们无法提供有关的更多详细信息   正如我们必须的那样,网上银行使用的其他安全措施   保护系统的完整性。

虽然这可能只是对他们使用SSL的参考,但我认为它可能暗示他们:

  • 加密数据库中的密码数据
  • 加密数据库中的密码,然后加密整个数据库以提高安全性。

我认为最好的解决方案是由ColOfAbRiX提供的,因为它不需要加密(没有像汇丰银行这样的银行可用的技术可能不是很安全)。