如何将此散列字符串转换为可用的字符串?
我有一个字符串,我发现,这可能是散列在base64。解码它会在我尝试过的每种编码中返回错误字符。我也无法访问生成它的代码,也无法对其进行反向工程。如何将此散列字符串转换为可用的字符串?
这是BASE64: AAECAR8GxwPJBLsFmQfZB/gIDI0B2AGoArUDhwSSBe0G6wfbCe0JgQr+DAA=
现在,它的60字节长,并且所有字符都是有效的的base64,如果你有更好的猜测比的base64通知我!
我也已经将它转换成一个字节数组,但我真的不知道如何将字节数组转换为不同编码的字符串。也许我可以运行一个for each循环,以不同的编码打印结果字符串,直到我找到一个实际的文本?
这是来自Hearthstone的新套牌编码。它确实是有效的base64,它永远不会翻译成纯文本。
$ echo 'AAECAR8GxwPJBLsFmQfZB/gIDI0B2AGoArUDhwSSBe0G6wfbCe0JgQr+DAA=' | base64 -D | od -t u1
0000000 0 1 2 1 31 6 199 3 201 4 187 5 153 7 217 7
0000020 248 8 12 141 1 216 1 168 2 181 3 135 4 146 5 237
0000040 6 235 7 219 9 237 9 129 10 254 12 0
0000054
这可能是特定的炉石指示类的自定义结构序列化格式,与现场,其余的被卡ID号的映射(我不认为是公开的还)达的牌。你可以清楚地看到一些模式,如果你重新安排格式:直到新的更新发布,我们无法真正知道更多
0 1
2 1
31 6
199 3
201 4
187 5
153 7
217 7
248 8
12
141 1
216 1
168 2
181 3
135 4
146 5
237 6
235 7
219 9
237 9
129 10
254 12
0
。更新结束后,将很容易进行试验,导出一张卡片并对结果进行比较。
建立在Tenchi2xh的答案上,我们可以使用the decklist that comes with the string来帮助找出数字的含义。
-
0 1 2 1 31
- 某种头,大概指示类,格式,和年 -
6
- 在甲板 - 然后有12个字节出现1X的卡的数量,我们可以解释这些作为6个16位整数:
967 1225 1467 1945 2009 2296
- 每个这些是出现1X在甲板一个卡 -
12
- 的卡的数量,每个在甲板上出现2次 - 12更多个16位整数:
397 472 680 949 1159 1426 1773 2027 2523 2541 2689 3326
- 各自是卡出现2个 -
0
- 填充在年底
的最后一件事搞清楚的是那些16位数字指的是哪种卡。幸运的是,它并不是太复杂,它们只是卡片“DBF ID”的稍微修改版本。我在HearthstoneJSON看这些。从许多x
得到DBF ID的方法是:
dbfId = (x >> 8) << 7 | (x % 128)
(或者换句话说,保持最低7位的相同,和右移1的其余部分移动)
例如:967
进行解码,以DBF ID 455
,这是Snake Trap。 3326
对应于DBF ID 1662
,它是Eaglehorn Bow。
额外的位可能表示一张黄金卡? –
它可能确实,但我们目前还不知道。示例中的所有卡都将该位设置为1。 – Tim
在附注中,生成此代码的原始程序是使用统一引擎的游戏。 – voidblaze
它可能在一个你不指望的字符集编码,当你说你“找到”字符串,没有理由它应该是人类可读的。它可能只是任何二进制数据! – TomTom101