Mar*_*ark 2 security encryption md5 cryptography
我不是安全专家......所以我在这里可能会非常错误.
我是对的,使用更强大的算法的唯一好处是减慢密码破解?
在这种情况下,他们必须有密码哈希,所以已经完成了我的数据库的权利吗?
因为我没有存储真实世界价值的东西使用强密码算法有什么意义?如果他们已经在我的数据库中,他们可以更改他们想要的任何内容,为什么他们想要密码呢?
我能看到的唯一原因是减慢暴力破解和保护我的用户密码,以防他们在电子邮件帐户中使用相同的密码...
我已经实现了SHA256 ......但我想知道它是否值得
Joh*_*kin 13
MD5不是加密,它是单向哈希.
使用更好的单向散列的唯一目的是延迟反转密码.随着计算机变得越来越强大并且已经发现各种散列算法中的漏洞,必须开发更好的散列.
在这种情况下,他们必须有密码哈希,所以已经完成了我的数据库的权利吗?
salting和hashing密码的目的是保护密码本身,即使在数据库受到损害的情况下也是如此.许多(大多数)用户使用相同的密码进行多次登录,因此如果它被泄露,那么它所链接的每个帐户都会被泄露.
SHA-256应该绰绰有余,但要确保你也对salowrd进行腌制.你的函数应该是这样的(伪代码):
fun store_password(plaintext):
salt = random_alphanumeric(40) # maybe put 40 in a config, or #define somewhere
hashed = sha256_digest(salt + plaintext)
return "sha256!" + salt + "!" + hashed
fun check_password(plaintext, stored):
algo, salt, hashed = stored.split("!")
if algo == "sha256"
return (sha256_digest(salt + plaintext) == hashed)
else if ... # other supported password schemes here
Run Code Online (Sandbox Code Playgroud)
下面的评论者指出,如果有足够强大的攻击者(或弱密码),存储完整的盐可能会使明文被暴力强制.如果您对此感到担心,请使用两份盐.每次生成一部分(saltA
),并将另一个存储在配置文件(saltB
)中.然后将它们组合起来生成/检查密码:
import my_config
fun store_password(plaintext):
saltA = random_alphanumeric(40)
hashed = sha256_digest(saltA + my_config.saltB + plaintext)
return "sha256!" + saltA + "!" + hashed
fun check_password(plaintext, stored):
algo, saltA, hashed = stored.split("!")
if algo == "sha256"
return (sha256_digest(saltA + my_config.saltB + plaintext) == hashed)
# ...
Run Code Online (Sandbox Code Playgroud)
请注意,如果您选择此系统,更改您的saltB
遗嘱将使每个存储的密码无效.
归档时间: |
|
查看次数: |
930 次 |
最近记录: |