【发布时间】:2013-03-22 10:26:09
【问题描述】:
所以我在数据库中有 SHA1 varchar 字符串,例如 'LQSVPLQSVPSYKLMTY7P5SVPSYN54CMGU' = 32 字节。如何将其转换为二进制刺痛?
SELECT BINARY('LQSVPLQSVPSYKLMTY7P5SVPSYN54CMGU');
不是我要找的。它将是相同的 32 字节字符串,但在 BLOB 中。我需要先从 sha1 获取价值。 Mysql\Postgresql 有什么方法可以做到吗?我也对类似的 MD5 sting 转换感兴趣。有没有通用的方法?
【问题讨论】:
-
这里出了点问题。 SHA1 的二进制形式总是正好 20 个字节,十六进制形式是 40 个字节。 MD5 分别是 16 个字节和 32 个十六进制,但粘贴的字符串不能是十六进制编码的二进制。此外,这些哈希生成像所呈现的那样的纯 ASCII 字符串的可能性非常低。
-
其实我的方法适用于MD5。看起来我的 sha1 字符串是唯一的问题。有人知道为什么/如何 SHA1 可以包含任何 [^0-9A-F] 字符吗?
-
可能是因为它是十六进制编码的。使用 UNHEX() 生成二进制 blob。
-
UNHEX 为我的每个“SHA1”字符串返回 NULL。它不起作用,因为 hex-sting 只是 [0-9A-F]+ 而我的字符串是 [0-9A-Z]+ 出于某种原因。
-
这正是我说你的帖子不可能完全正确的原因。建议的字符串不能是 SHA1 哈希(十六进制或原始),因为长度错误;长度与十六进制的 MD5 匹配,但它不是正确的十六进制。请检查您的假设。你从哪里得到这个字符串?途中是否有可能发生与字符集相关的损坏?
标签: mysql sql postgresql binary