我将使用这种方法来存储我的密码:
password
盐类密码,然后用加密算法加密随机选择的数据数组(由预定义的字符/字节表组成)
然后,我将
中。
要检查密码的有效性:
从DB中获得password
你觉得这个程序怎么样?
用几句话来说,这是使用散列函数的一种替代.
在这种方法中,加密算法即将用于非可逆值的计算。
编辑
# 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发布于 2011-02-21 04:34:30
与简单地存储密码和salt的散列相比,所提议的方案充其量只是略低于安全性。
这是因为加密步骤简单地为检查每个哈希值是否正确增加了一小部分恒定的时间;但同时它也引入了等效散列类,因为ARRAY存在多个可能的排列,这些排列将被认为是有效的。
发布于 2011-02-18 14:53:40
从您所写的内容来看,我假设您希望执行以下操作:
# 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首先:没有一个理智的人会在生产系统中使用这样的自制方案。所以,如果你想在现实世界中真正实现这一点,请回到过去。甚至不要尝试自己编写代码,使用一个经过验证的实现被广泛接受的算法的软件库。
现在,如果你想把它看作是一种心理锻炼,你可以这样开始:
如果您假设攻击者将知道方程的所有部分,但实际密码除外。因此,希望检索密码的攻击者将已经知道加密的文本、明文和部分密码。
成功的机会将取决于实际的加密方案,也许是链接模式。
我自己也不是一个密码分析师,但我没有想太多,我觉得可能有很多攻击的角度。
发布于 2011-02-18 14:17:39
每次有人登录时,你都要强行对每个密码进行加密。
从DB读取salt并计算解密密钥
这是不可能做到的,除非你知道密码在手边。
只需对密码进行盐(和多个散列)。
https://stackoverflow.com/questions/5042321
复制相似问题