我正在尝试从游戏中解密保存文件。我已经在python中有了这个的工作版本,但是我似乎无法使用node中的equivalet库来做到这一点。
这是有效的python代码:
import base64, gzip, os, zlib, struct
data = FileOpen(path) #returns file as ASCII
res = Xor(data,11)
fin = zlib.decompress(base64.b64decode(res.replace('-','+').replace('_','/').encode())[10:],-zlib.MAX_WBITS)
#fin is the decrypted string
这是我尝试使用node的方法,但是zLib只是抛出“不正确的标头检查”:
const fs = require('fs')
const zlib = require('zlib')
const xor = require('xor-crypt')
const { base64encode, base64decode } = require('nodejs-base64')
let data = fs.readFileSync(fPath + save).toString('ascii')
let res = xor(data,11)
let gzipd = Buffer.from(base64decode(res.replace('-','+').replace('_','/')).slice(0, -10))
let fin = zlib.inflateSync(gzipd).toString('utf-8')
问题很可能出在zlib库中,因为我看不到为什么xor和base64解密会有所不同。我在减压方面没有太多经验。
这是我尝试解密(以ascii格式)的示例:
C?xBJJJJJJJJHTEBqheA::Ndrhlx]lHbYB\\X:DBXJEG92G^]JJJJ
这意味着“你好,这是一个测试”,当我使用python对其解密时,它可以正常工作。谁能弄清楚如何使用节点对其进行解密?