我将使用这种方法来存储我的密码:
检查密码有效性:
您对此程序有何看法?
简而言之,它是使用哈希函数的一种替代方法......
在这种方法中,加密算法即将用于计算非可逆值。
修改
# Encrypt/decrypt function that works like this:
KEY=HASH(PASSWORD)
CYPHERTEXT = ENCRYPT(PLAINTEXT, KEY)
PLAINTEXT = DECRYPT(CYPHERTEXT, KEY)
# Encrypting the password when entered
KEY=HASH(PASSWORD)+SALT or HASH(PASSWORD+SALT)
ARRAY={A1, A2,... AI}
SOME_TABLE=RANDOM({ARRAY})
ENCRYPTED_TABLE = ENCRYPT(SOME_TABLE, KEY + SALT)
# Checking validity
DECRYPT(ENCRYPTED_TABLE, PASSWORD + SALT) == SOME_TABLE
if(SOME_TABLE contains only {ARRAY} elements) = VALID
else INVALID
答案 0 :(得分:2)
根据你所写的内容,我假设您要执行以下操作:
# You have some encryption function that works like this
CYPHERTEXT = ENCRYPT(PLAINTEXT, KEY)
PLAINTEXT = DECRYPT(CYPHERTEXT, KEY)
# Encrypting the password when entered
ENCRYPTED_TABLE = ENCRYPT(SOME_TABLE, PASSWORD + SALT)
# Checking validity
DECRYPT(ENCRYPTED_TABLE, PASSWORD + SALT) == SOME_TABLE
首先关闭:没有理智的人会在生产系统中使用这样的自制方案。因此,如果您正考虑在现实世界中实际实现这一点,请返回。甚至不要尝试自己编写代码,使用经过验证的软件库来实现广泛接受的算法。
现在,如果您想将其视为一项心理锻炼,您可以这样开始:
如果您认为攻击者会知道等式的所有部分,除了实际密码。因此,想要检索密码的攻击者已经知道加密文本,明文和密码的一部分。
成功的机会取决于实际的加密方案,也可能取决于链接模式。
我自己不是一个密码分析师,但是如果不考虑太多,我觉得可能存在多种攻击角度。
答案 1 :(得分:1)
建议的方案充其量只比简单地存储密码和盐的哈希值安全性稍差。
这是因为加密步骤只需添加一小段时间来检查每个哈希值是否正确;但与此同时,它还引入了等效哈希的类,因为ARRAY
有多种可能的排列将被识别为有效。
答案 2 :(得分:0)
每次有人登录时,您都必须对每个密码强制加密。
从DB读取salt并计算解密密钥
除非您事先知道密码是什么,否则无法完成。
只需盐(和多个哈希)密码。