我正在开发一个php登录系统,我想知道如何制作一个安全的密码输入系统,要求说出密码的第1,第2和第8个字符,就像许多网上银行系统一样。怎么能让这个和将密码存储为双盐水哈希?
答案 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)
与他们联系后,他们说:
确保我们系统的安全性并将继续是我们的首要任务。
发送到我们系统的所有详细信息都是加密的 使用高加密级别。只要你保持登录 信息保密,我们可以向您保证该服务是安全的。如 您将欣赏,我们无法提供有关的更多详细信息 正如我们必须的那样,网上银行使用的其他安全措施 保护系统的完整性。
虽然这可能只是对他们使用SSL的参考,但我认为它可能暗示他们:
我认为最好的解决方案是由ColOfAbRiX提供的,因为它不需要加密(没有像汇丰银行这样的银行可用的技术可能不是很安全)。