生成 SHA-512 哈希时,如何在 Python 中重现 SQL NVARCHAR 的行为?



我有以下SQL查询

SELECT CONVERT(VARCHAR(254), HASHBYTES('SHA2_512', CONVERT(NVARCHAR(24), '2020-05-27 00:00:00.000', 127)), 2)

生成哈希值

E8FD9193FA939608DF127AC73428EB39F66CB6F44440083EF269A1F72176BF7BF80C3EB26BA43277E6F9CFFB4F7AFC6AA83AF527BEDF887E4EE06BA492CAD3BE

今天的日期,我想在 Python 中重现这个哈希

hashlib.sha512('2020-05-27 00:00:00.000'.encode()).hexdigest().upper()

但我得到

FE48F900755B4C19039E6886148566DF93730A7887771C7A72260BB4E784080CDDA6C70C428A6EEFED658846F45F3D153C6B6472C04508B9242C14C61BD1C1BE

作为哈希值。当我使用 VARCHAR 而不是 NVARCHAR 时,我得到了正确的哈希值。如何在 Python 中重现 NVARCHAR 的巴哈维?

NVARCHAR 编码为 UTF-16LE。将其添加到

hashlib.sha512('2020-05-27 00:00:00.000'.encode('utf_16_le')).hexdigest().upper()

创建正确的哈希值。

nvarchar 和默认的 python 字符串都应该是 Unicode 和多字节字符。但是,还有另外两种子类型。大端序和小端序不同。低端将为您工作。使用"utf-16le"编码来获得您想要的答案。

hashlib.sha512('2020-05-27 00:00:00.000'.encode('utf-16le')).hexdigest().upper()

最新更新