SHA1哈希澄清
我有以下Python代码:SHA1哈希澄清
from hashlib import sha1
secretString=b"this is the secret string"
publicData=b"x10291434"
hash=sha1(publicData+secretString).hexdigest()
,如果我现在大众消费送出去的publicData
和hash
。这安全吗?我想检查一下,当用户提供publicData
时,它与我原来用secretKey
发送的hash
相匹配。
我只是想确认我在做这个正确
它看起来像你正在尝试做的HMAC
你应该尝试使用类似itsdangerous
>>> from itsdangerous import Signer
>>> s = Signer('secret-key')
>>> s.sign('my string')
'my string.wh6tMHxLgJqB6oY1uT73iMlyrOA'
>>> s.unsign('my string.wh6tMHxLgJqB6oY1uT73iMlyrOA')
'my string'
谢谢Jakob如果我不想使用另一个库,我可以使用hashlib.pbkdf2_hmac生成HMAC吗? –
@johhnyB'hashlib.pbkdf2_hmac'非常棒。请注意,它被设计成缓慢地作为强力攻击的障碍。根据您的应用程序,您可能不需要这么多的安全性,而简单的HMAC就足够了。 –
嗨PM 2Ring是的,我宁愿在这种情况下超过安全速度。我只是读了关于hmac.new(key,msg = None,digestmod = None)的python函数。这会更快吗?如果密钥只是一个随机字符串,我认为是一个秘密密钥,这有什么关系吗?或者是否还必须以某种特殊方式生成密钥? –
好,SHA-1不被认为是安全散列算法,因此没有,很不安全。
对于资金充足的对手,SHA-1不再被认为是安全的。 2005年,密码分析人员发现了对SHA-1的攻击,表明该算法可能不够安全,无法继续使用[4],并且自2010年以来,许多组织推荐使用SHA-2或SHA-3替代该算法[5] [6]。 [7]微软,[8]谷歌,[9]苹果[10]和Mozilla [11] [12] [13]都宣布,他们各自的浏览器将在2017年
源停止接受SHA-1的SSL证书:https://en.wikipedia.org/wiki/SHA-1
更多阅读:https://www.schneier.com/blog/archives/2005/02/cryptanalysis_o.html
它足够安全,因为我读了你需要很多计算能力来打破它。而我在这里并没有处理非常敏感的信息。 –
您在问题代码中使用SHA-1的方式是不安全的。但是,通过使用SHA-1作为HMAC中的散列,您可以轻松地使其变得安全。但正如我在对这个问题的评论中所说的,你也可以在HMAC中使用SHA-256。 –
你应该使用正确的[HMAC构造](https://en.wikipedia.org/wiki/Hash-based_message_authentication_code) –
Dan D说了些什么。使用标准[hmac](https://docs.python.org/3/library/hmac.html)模块中的任何hashlib散列函数都很容易。对于新代码,您可能会使用更强大的散列,例如SHA-256,但正如维基百科文章中提到的那样,HMAC构造抵抗简单MD5或SHA-1散列可能发生的各种攻击。 –
Insterad使用HMAC,请参阅:[用于消息身份验证的键控哈希](https://docs.python.org/2/library/hmac.html#module-hmac)。 – zaph