2017-05-16 45 views
0

我有一個字符串,我發現,這可能是散列在base64。解碼它會在我嘗試過的每種編碼中返回錯誤字符。我也無法訪問生成它的代碼,也無法對其進行反向工程。如何將此散列字符串轉換爲可用的字符串?

這是BASE64: AAECAR8GxwPJBLsFmQfZB/gIDI0B2AGoArUDhwSSBe0G6wfbCe0JgQr+DAA=

現在,它的60字節長,並且所有字符都是有效的的base64,如果你有更好的猜測比的base64通知我!

我也已經將它轉換成一個字節數組,但我真的不知道如何將字節數組轉換爲不同編碼的字符串。也許我可以運行一個for each循環,以不同的編碼打印結果字符串,直到我找到一個實際的文本?

+0

在附註中,生成此代碼的原始程序是使用統一引擎的遊戲。 – voidblaze

+0

它可能在一個你不指望的字符集編碼,當你說你「找到」字符串,沒有理由它應該是人類可讀的。它可能只是任何二進制數據! – TomTom101

回答

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 

這可能是特定的爐石指示類的自定義結構序列化格式,與現場,其餘的被卡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 

。更新結束後,將很容易進行試驗,導出一張卡片並對結果進行比較。

+0

非常感謝,現在它很有意義。我期望像一個JSON對象。如果我可能會問,你用什麼將字符串從base64轉換爲可讀的? – voidblaze

+0

在這個例子中,我使用了bash命令:'base64'和'od'。 'od'就像一個十六進制查看器,除了你可以選擇顯示文件的格式,如十六進制,十進制,C符號等。 – Tenchi2xh

+0

特別是,通過'od -t u1'管道文件將會顯示每個無符號十進制字節。 順便說一句,如果你有興趣,我做了一個非常基本的Python解析器的甲板代碼靈感來自@蒂姆的迴應 – Tenchi2xh

4

建立在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。

+0

額外的位可能表示一張黃金卡? –

+0

它可能確實,但我們目前還不知道。示例中的所有卡都將該位設置爲1。 – Tim

相關問題