如何将此散列字符串转换为可用字符串?

时间:2017-05-16 17:58:38

标签: base64 decoding

我找到了一个字符串,可能是在base64中进行了哈希处理。解码它会在我尝试过的每个编码中返回错误字符。我也无法访问生成它的代码,也无法对其进行反向工程。

这是base64: AAECAR8GxwPJBLsFmQfZB/gIDI0B2AGoArUDhwSSBe0G6wfbCe0JgQr+DAA=

现在,它的长度为60个字节,并且所有字符对base64都有效,如果你有比base64更好的猜测通知我的话!

我也将它转换为字节数组,但我真的不知道如何将字节数组转换为具有不同编码的字符串。也许我可以为每个循环运行一个以不同编码打印结果字符串的循环,直到找到一个实际文本?

2 个答案:

答案 0 :(得分:5)

这是来自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

这可能是一种特定于Hearthstone的自定义结构序列化格式,其中一个字段表示该类,其余的是卡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

在发布新更新之前,我们无法了解更多信息。当更新结束时,很容易进行实验,只导出一张卡片并比较结果。

答案 1 :(得分:4)

为了建立Tenchi2xh的答案,我们可以使用the decklist that comes with the string来帮助弄清楚数字的含义。

  • 0 1 2 1 31 - 某种标题,可能表示类,格式和年份
  • 6 - 牌组中出现1张的牌数
  • 然后有12个字节,我们可以将它们解释为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 - 每张都是2x
  • 的卡片
  • 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。