我对加密函数的参数是一个字符串有点困惑。我应该简单地用str()来包装非字符串参数,例如加密函数的参数
hashlib.sha256(str(user_id)+str(expiry_time))
hmac.new(str(random.randbits(256)))
(忽略random.randbits()可能不是密码好的那一刻)。 编辑:我意识到hmac的例子很愚蠢,因为我没有在任何地方存储密钥!
我对加密函数的参数是一个字符串有点困惑。我应该简单地用str()来包装非字符串参数,例如加密函数的参数
hashlib.sha256(str(user_id)+str(expiry_time))
hmac.new(str(random.randbits(256)))
(忽略random.randbits()可能不是密码好的那一刻)。 编辑:我意识到hmac的例子很愚蠢,因为我没有在任何地方存储密钥!
那么,通常散列函数(和通常的密码函数)在字节上工作。 Python字符串基本上是字节字符串。如果你想计算某个对象的散列,你必须将其转换为字符串表示。如果你想检查散列是否正确,只要确保以后应用相同的操作。并确保您的字符串表示不包含您不想检查的任何更改数据。
编辑:由于流行的请求一个简短的提醒,Python unicode字符串不包含字节,但unicode代码点。每个unicode代码点包含多个字节(2或4,取决于Python解释器的编译方式)。 Python字符串只包含字节。所以Python字符串(类型str)是与字节数组最相似的类型。
您可以。
但是,对于HMAC,您实际上想要将密钥存储在某处。没有密钥,以后就无法验证散列值。 :-)
哦和Sha256并不是一个真正的工业强度密码功能(尽管不幸的是它在很多网站上都很常用)。这不是一个真正的方法来保护密码或其他关键数据,但不足以产生时间标记
编辑:如上所述Sha256至少需要一些盐。如果没有盐分,Sha256的字典攻击(按时间)破解的障碍很低,并且还有很多彩虹表格可供使用。我个人不会使用比Blowfish更少的密码(但那是因为我偏执)
你的意思是吗?当然,如果你想用它来保护密码,你应该添加一个salt,但是对于所有的散列函数都是如此。就个人而言,我认为SHA-256与散列函数一样具有行业实力。 – 2008-10-17 09:26:22
您可能想澄清'str'和'unicode'两种Python字符串类型之间的区别。 – 2008-10-17 15:38:44