gpt4 book ai didi

javascript - 获取 nodejs 中 mega.nz 文件夹的名称文件

转载 作者:行者123 更新时间:2023-11-30 00:06:35 29 4
gpt4 key购买 nike

请求mega.nz的api,解析url以获取文件夹的私钥,并尝试通过nodejs的加密从请求的响应中解码文件名。

我的代码:

const crypto = require('crypto')
const parse = require('url').parse
const request = require('request')

const link = 'https://mega.nz/#F!gE5WkDpS!Yh6AQtYHPgi-rEkir_gAEw'
const api = 'https://eu.api.mega.co.nz/cs?id=-1771463320&n=MBwjmCqR'

function d64 (s) {
s += '=='.substr((2 - s.length * 3) & 3)
s = s.replace(/-/g, '+').replace(/_/g, '/').replace(/,/g, '')
return new Buffer(s, 'base64')
}

function from256to128 (s) {
var o = new Buffer(16)
for (var i = 0; i < 16; i++) {
o[i] = s[i] ^ s[i + 16]
}
return o
}

function decodeName (at) {
var end = at.length
while (!at.readUInt8(end - 1)) end--
return at.slice(0, end).toString()
}

const url = parse(link)
const split = url.hash.split('!')
const k0 = d64(split[2])

request({
method: 'POST', uri: api, body: '[{"a":"f","c":1,"r":1,"ca":1}]'
}, (e, r, b) => {
if (!e && r.statusCode === 200) {
for (let file of JSON.parse(b)[0].f) {
if (file.t === 1) {
let k = d64(file.k.split(':')[1])
let a = d64(file.a)
let aes = crypto.createDecipheriv('aes-128-ecb', k0, Buffer(0))
aes.setAutoPadding(false)
let kdec = aes.update(k)
aes = crypto.createDecipheriv('aes-128-cbc', kdec, Buffer(16))
aes.setAutoPadding(false)
let name = decodeName(aes.update(a))
console.log(name)
} else {
let k = d64(file.k.split(':')[1])
let a = d64(file.a)
let aes = crypto.createDecipheriv('aes-128-ecb', k0, Buffer(0))
aes.setAutoPadding(false)
let k2dec = from256to128(aes.update(k))
aes = crypto.createDecipheriv('aes-128-cbc', k2dec, Buffer(16))
aes.setAutoPadding(false)
let name = decodeName(aes.update(a))
console.log(name)
}
}
}
})

我的输出是更多 splinter 的文本,我尝试更改 url 并获得更多 splinter 的文本:

�MzM�ݾ��+,�BW���p�K����

最佳答案

您的代码中有两个错误:

const link = 'https://mega.nz/#F!gE5WkDpS!Yh6AQtYHPgi-rEkir_gAEw'
const api = 'https://eu.api.mega.co.nz/cs?id=-1771463320&n=MBwjmCqR'

您正在请求 MBwjmCqR 文件夹信息,但使用的是 gE5WkDpS key 。

let aes = crypto.createDecipheriv('aes-128-ecb', k0, Buffer(0))
aes = crypto.createDecipheriv('aes-128-cbc', kdec, Buffer(16))

使用 Buffer(size) 不会初始化它,因此 Buffer 将包含以前在内存中的数据。使用 Buffer.alloc(size, 0) 将其初始化为零,这将匹配 MEGA 的实现。

关于javascript - 获取 nodejs 中 mega.nz 文件夹的名称文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38275326/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com