我正在处理一个系统,它使用MD5(无盐)对用户密码进行散列。我想使用SHA-512和盐来更加安全地存储密码。
虽然这对于未来的密码很容易实现,但我也希望能够为现有的MD5散列密码进行改进,最好不需要强制所有用户更改密码。我的想法是仅仅使用SHA-512和适当的盐来对现有的MD5散列进行散列。我可以在数据库中设置某些标志,以指示哪些密码从明文进行了散列,哪些是从MD5散列进行散列的。或者在验证用户时尝试两种方法。甚至可以先用MD5对新密码进行散列,然后再进行SHA-512/salt散列,以便将其与旧密码相同对待。
从程序上看,我认为这不会成为问题,但我不了解加密/哈希的足够知识,无法判断通过SHA-512/salt散列将已经MD5散列的密码是否会影响其质量。我的第一反应是,如果有任何问题,结果会更加强大,相当于轻微的密钥拉伸。
我的第二个直觉是,我不确定自己在说什么,所以最好寻求建议。有什么想法吗?
虽然这对于未来的密码很容易实现,但我也希望能够为现有的MD5散列密码进行改进,最好不需要强制所有用户更改密码。我的想法是仅仅使用SHA-512和适当的盐来对现有的MD5散列进行散列。我可以在数据库中设置某些标志,以指示哪些密码从明文进行了散列,哪些是从MD5散列进行散列的。或者在验证用户时尝试两种方法。甚至可以先用MD5对新密码进行散列,然后再进行SHA-512/salt散列,以便将其与旧密码相同对待。
从程序上看,我认为这不会成为问题,但我不了解加密/哈希的足够知识,无法判断通过SHA-512/salt散列将已经MD5散列的密码是否会影响其质量。我的第一反应是,如果有任何问题,结果会更加强大,相当于轻微的密钥拉伸。
我的第二个直觉是,我不确定自己在说什么,所以最好寻求建议。有什么想法吗?
MD5(salt + password)
在实践中等同于SHA512(salt + password)
)。像MD5和SHA系列这样的通用哈希函数并不适用于存储密码。请使用bcrypt。 - NullUserException