gpt4 book ai didi

python - 由于编码而比较哈希值时出错

转载 作者:行者123 更新时间:2023-11-29 13:47:27 24 4
gpt4 key购买 nike

我正在尝试将 php 应用程序转换为 python 应用程序,但我陷入了哈希值

使用 MySQL 和 SQLAlchemy 进行 ORM

MySQL

field : client_hash
type : varchar(20)
collation: Latin1_bin

SQLAlchemy

client_hash = Column(Unicode)

我尝试过其他类型,例如 varchar,但它似乎给了我与我正在寻找的内容相距甚远的哈希值。

当我查看 phpmyadmin 中的内容时,它看起来像

ù3×þØc(    7JûìÎËþf–E”

我从客户端获取此哈希

\xf93\xd7\xfe\xd8c(\t\x9d7J\xfb\xec\xce\xcb\xfef\x96E\x94

并且服务器将其排除为正确答案

\xf93\xd7\xfe\xd8c(\t\x9d7J\xfb\xec\xce\xcb\xfef\u2013E\u201d

我不确定如何将最后两个转换为十六进制或者它们是否相同。

最佳答案

最后两个相同。第一个十六进制序列是 Python 字节字符串的原始表示;它从 Latin-1 解码为:

>>> '\xf93\xd7\xfe\xd8c(\t\x9d7J\xfb\xec\xce\xcb\xfef\x96E\x94'.decode('latin1')
u'\xf93\xd7\xfe\xd8c(\t\x9d7J\xfb\xec\xce\xcb\xfef\x96E\x94'
>>> print '\xf93\xd7\xfe\xd8c(\t\x9d7J\xfb\xec\xce\xcb\xfef\x96E\x94'.decode('latin1')
ù3×þØc( 7JûìÎËþfE

但是你的第二个值是一个unicode字符串;它使用 Python \uxxxx unicode 代码点转义:

>>> u'\xf93\xd7\xfe\xd8c(\t\x9d7J\xfb\xec\xce\xcb\xfef\u2013E\u201d'
u'\xf93\xd7\xfe\xd8c(\t\x9d7J\xfb\xec\xce\xcb\xfef\u2013E\u201d'
>>> print u'\xf93\xd7\xfe\xd8c(\t\x9d7J\xfb\xec\xce\xcb\xfef\u2013E\u201d'
ù3×þØc( 7JûìÎËþf–E”

因此 Unicode 文字值确实与您在 phpmyadmin 中看到的相符。

除了最后 3 个字符之外,其他都是相同的:

>>> latin1 = '\xf93\xd7\xfe\xd8c(\t\x9d7J\xfb\xec\xce\xcb\xfef\x96E\x94'.decode('latin1')
>>> unicode_literal = u'\xf93\xd7\xfe\xd8c(\t\x9d7J\xfb\xec\xce\xcb\xfef\u2013E\u201d'
>>> latin1[:-3] == unicode_literal[:-3]
True
>>> latin1[-2] == unicode_literal[-2]
True
>>> latin1[-1] == unicode_literal[-1]
False
>>> latin1[-3] == unicode_literal[-3]
False

如果没有更多信息,很难判断为什么 MySQL 设置返回 \x96\x94 而不是 \u2013\u201d 代码点;我没有直接看到其中的相关性。

您可能需要配置 SQLAlchemy 连接器以匹配此 MySQL 数据库中使用的编码,并在数据库连接级别、表级别甚至列级别(如果需要)设置 charset 参数。

关于python - 由于编码而比较哈希值时出错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17190638/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com