【发布时间】:2020-12-09 03:26:07
【问题描述】:
我在一个散列的 SQL 表中有一些数据,并试图将这些变量转换回字符串,但是我得到的所有内容都是乱码。
我已经尝试了有关 Stack Overflow 的所有建议,包括删除所有连续的双零“00”。
我不知道未经哈希处理的变量是什么样的,但我认为它将是一个字符串变量。我们怎么会知道从哪里开始确定对该字段应用哪种哈希?
非常感谢任何帮助或指导。
到目前为止,我的尝试是:
SELECT CASE WHEN LEN(0x00007041673F000000007041B2060000) > 0 THEN
convert(varchar(max),
convert(varbinary(max),
REPLACE(
convert(varchar(max),0x00007041673F000000007041B2060000, 1)
,'00',''
)
,1)
,1)
ELSE '' END
,CONVERT(varbinary(64),0x00007041673F000000007041B2060000, 1)
,CONVERT(varchar(64), 0x00007041673F000000007041B2060000, 1)
,CONVERT(varchar(64), 0x00007041673F000000007041B2060000, 2)
--Other Hash Variables-
--0x00007041673F000000007041B2060000
--0x0000C84271EB0000
--0x0000C842683F0000
--0x0000C842693F0000
--0x0000C842703F00000000C842775A0200
--0x0000A041873F00000000A041F9050000
--0x0000C842264000000000C842F04F0100
--0x000034427C400000000034426E4A0000
编辑 - 还尝试在 SQL 上进行 BASE64 解码 - https://dba.stackexchange.com/questions/191273/decode-base64-string-natively-in-sql-server
SELECT
CONVERT
(
VARCHAR(MAX),
CAST('' AS XML).value('xs:base64Binary(sql:column("BASE64_COLUMN"))', 'VARBINARY(MAX)')
) AS RESULT
FROM
(
SELECT '0x00007041673F000000007041B2060000' AS BASE64_COLUMN
) A
【问题讨论】:
-
没有其他人可以告诉您散列是什么 - 您需要访问执行散列的代码。不过要尝试的一件事是假设 base64 编码。
-
A hash function “是可用于将任意大小的数据映射到固定大小值的任何函数。”它本质上不是一个可逆的过程,也不能保证结果是唯一的。当使用给定算法进行哈希处理时,您的中间名首字母和 Encyclopædia Galactica 可能会碰巧生成值
0xDEADC0DE。尽管您可能能够从散列值转到 a 值,但您不能确定它是原始值。 -
大部分二进制值都是 16 字节,它们可以只是唯一标识符吗?
select cast(0x00007041673F000000007041B2060000 as uniqueidentifier)
标签: sql sql-server tsql hex ascii