我有点困惑加密函数的参数是一个字符串。我是否应该简单地用 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 字符串(类型 斯特) 是与字节数组最相​​似的类型。

其他提示

你可以。

但是,对于HMAC,您实际上想要将密钥存储在某处。如果没有密钥,则无法在以后验证哈希值。 : - )

哦,Sha256并不是真正的工业强度加密功能(虽然不幸的是它在许多网站上都很常用)。这不是保护密码或其他关键数据的真正方法,但足以产生时间标记

编辑:如上所述Sha256至少需要一些盐。如果没有盐,Sha256可以通过字典攻击(按时间顺序)破解,并且还有很多Rainbow桌子可供使用。就个人而言,我不会使用比Blowfish更少的密码(但那是因为我是偏执狂)

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top