如何比较带盐SHA512哈希,判断是否源自同一密码?
问题解答
1. 能否不获取原密码判断两个带盐SHA512哈希是否来自同一密码?
不能。从你给出的格式来看,这两个哈希是「SHA512哈希值:盐」的结构。加盐哈希的核心逻辑是原密码与盐拼接后再进行哈希运算,不同的盐会让相同的原密码生成完全不同的哈希值。
你提供的h1和h2的盐明显不同(h1的盐是9c0d2ff09e8c43babc49d42ad215e0fa,h2的盐是1a8de82d82134aecbab7f6d0c37c8444),这种情况下,即使原密码相同,最终生成的哈希也会不一样。而且没有原密码的话,你无法用其中一个的盐去验证另一个的哈希是否匹配同一密码,所以没法直接通过这两个哈希判断原密码是否相同。
2. 你给出的Python代码比较方式可行吗?
完全不可行。这段代码的逻辑是把整个带盐哈希字符串(比如h1的哈希值:盐完整内容)编码后再做一次SHA512哈希,然后和h2做同样操作后的结果比较。这和「验证原密码是否生成对应加盐哈希」的逻辑完全无关,只是在哈希两个不同的字符串,毫无意义。
如果要验证某个密码是否对应h1,正确的逻辑示例(需注意实际拼接顺序要和生成哈希时一致):
import hashlib def verify_password(password, hashed_str): hash_part, salt = hashed_str.split(':') # 假设生成哈希时用的是「密码+盐」的拼接顺序 computed_hash = hashlib.sha512((password + salt).encode()).hexdigest() return computed_hash == hash_part
但回到你的需求,因为两个哈希的盐不同,你没办法用这种方式去判断它们是否来自同一原密码——除非你能拿到原密码,分别用两个盐生成哈希后再和对应哈希值对比。
内容的提问来源于stack exchange,提问作者cheat.008
相关产品推荐
相关产品推荐

