|
@ -1,14 +1,22 @@ |
|
|
const CryptoJS = require("crypto-js"); |
|
|
const CryptoJS = require("crypto-js"); |
|
|
const CORE_KEY = CryptoJS.enc.Hex.parse("687a4852416d736f356b496e62617857"); |
|
|
const CORE_KEY = CryptoJS.enc.Hex.parse("687a4852416d736f356b496e62617857"); |
|
|
const META_KEY = CryptoJS.enc.Hex.parse("2331346C6A6B5F215C5D2630553C2728"); |
|
|
const META_KEY = CryptoJS.enc.Hex.parse("2331346C6A6B5F215C5D2630553C2728"); |
|
|
import {AudioMimeType, DetectAudioExt, GetArrayBuffer, GetFileInfo, GetWebImage, WriteMp3Meta} from "./util" |
|
|
const MagicHeader = [0x43, 0x54, 0x45, 0x4E, 0x46, 0x44, 0x41, 0x4D]; |
|
|
|
|
|
import { |
|
|
|
|
|
AudioMimeType, |
|
|
|
|
|
DetectAudioExt, |
|
|
|
|
|
GetArrayBuffer, |
|
|
|
|
|
GetFileInfo, |
|
|
|
|
|
GetWebImage, |
|
|
|
|
|
IsBytesEqual, |
|
|
|
|
|
WriteMp3Meta |
|
|
|
|
|
} from "./util" |
|
|
|
|
|
|
|
|
export async function Decrypt(file, raw_filename, raw_ext) { |
|
|
export async function Decrypt(file, raw_filename, raw_ext) { |
|
|
const fileBuffer = await GetArrayBuffer(file); |
|
|
const fileBuffer = await GetArrayBuffer(file); |
|
|
const dataView = new DataView(fileBuffer); |
|
|
const dataView = new DataView(fileBuffer); |
|
|
|
|
|
|
|
|
if (dataView.getUint32(0, true) !== 0x4e455443 || |
|
|
if (!IsBytesEqual(MagicHeader, new Uint8Array(fileBuffer, 0, 8))) |
|
|
dataView.getUint32(4, true) !== 0x4d414446) |
|
|
|
|
|
return {status: false, message: "此ncm文件已损坏"}; |
|
|
return {status: false, message: "此ncm文件已损坏"}; |
|
|
|
|
|
|
|
|
const keyDataObj = getKeyData(dataView, fileBuffer, 10); |
|
|
const keyDataObj = getKeyData(dataView, fileBuffer, 10); |
|
@ -22,7 +30,6 @@ export async function Decrypt(file, raw_filename, raw_ext) { |
|
|
let lenAudioData = audioData.length; |
|
|
let lenAudioData = audioData.length; |
|
|
for (let cur = 0; cur < lenAudioData; ++cur) audioData[cur] ^= keyBox[cur & 0xff]; |
|
|
for (let cur = 0; cur < lenAudioData; ++cur) audioData[cur] ^= keyBox[cur & 0xff]; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if (musicMeta.album === undefined) musicMeta.album = ""; |
|
|
if (musicMeta.album === undefined) musicMeta.album = ""; |
|
|
|
|
|
|
|
|
const artists = []; |
|
|
const artists = []; |
|
@ -132,7 +139,6 @@ function getMetaData(dataView, fileBuffer, offset) { |
|
|
if (plainText.slice(0, labelIndex) === "dj") { |
|
|
if (plainText.slice(0, labelIndex) === "dj") { |
|
|
result = result.mainMusic; |
|
|
result = result.mainMusic; |
|
|
} |
|
|
} |
|
|
console.log(result); |
|
|
|
|
|
if (!!result.albumPic) result.albumPic = result.albumPic.replace("http://", "https://"); |
|
|
if (!!result.albumPic) result.albumPic = result.albumPic.replace("http://", "https://"); |
|
|
return {data: result, offset: offset}; |
|
|
return {data: result, offset: offset}; |
|
|
} |
|
|
} |
|
|