diff --git a/util/crypto.js b/util/crypto.js index 419336d..e34699f 100644 --- a/util/crypto.js +++ b/util/crypto.js @@ -152,7 +152,12 @@ const decrypt = (cipher) => { } const aesEcbEncrypt = (key, plaintext) => { - const cipher = crypto.createCipheriv(`aes-${key.length * 8}-ecb`, key, null) + // 某些运行时不允许使用 null 作为 IV,因此使用 Buffer.alloc(0) ,同时与上下文deriveX25519AesKey等函数保持一致 + const cipher = crypto.createCipheriv( + `aes-${key.length * 8}-ecb`, + key, + Buffer.alloc(0), + ) return Buffer.concat([cipher.update(Buffer.from(plaintext)), cipher.final()]) } @@ -160,7 +165,7 @@ const aesEcbDecrypt = (key, ciphertext) => { const decipher = crypto.createDecipheriv( `aes-${key.length * 8}-ecb`, key, - null, + Buffer.alloc(0), ) return Buffer.concat([decipher.update(ciphertext), decipher.final()]) } diff --git a/util/request.js b/util/request.js index 9b277e9..a0c9020 100644 --- a/util/request.js +++ b/util/request.js @@ -503,7 +503,11 @@ const createRequest = async (uri, data, options) => { !cookie.NMTID ) { NMTID_RETRIES_LEFT-- - answer.cookie = setCookies.map((x) => { + answer.cookie = ( + typeof res.headers['set-cookie'] === 'string' + ? [res.headers['set-cookie']] + : res.headers['set-cookie'] || [] + ).map((x) => { const cleaned = cleanCookie(x) const match = x.match(/(?:^|;\s*)NMTID=([^;]+)/) if (match) {