目前的解密逻辑如下:
export async function _decryptChapterContent(decryptKey: string, cpContent: string): Promise<string> {
try {
let key = new Uint8Array(buffer.from(decryptKey, 'utf-8').buffer)
let base64 = new util.Base64Helper
const cryptKeyData = base64.decodeSync(key).subarray(0, 16)
const data = new Uint8Array(buffer.from(cpContent, 'base64').buffer)
const nonce = copyOfRange(data, 0, 16)
const content = copyOfRange(data, 16, data.length)
let encryptMess: cryptoFramework.DataBlob = { data: content };
let ivBlob: cryptoFramework.DataBlob = { data: nonce };
let ivParamsSpec: cryptoFramework.IvParamsSpec = {
algName: "IvParamsSpec",
iv: ivBlob
};
let symKeyBlob: cryptoFramework.DataBlob = { data: cryptKeyData };
let aesGenerator = cryptoFramework.createSymKeyGenerator('AES128');
let symKey = aesGenerator.convertKeySync(symKeyBlob);
let decoder = cryptoFramework.createCipher('AES128|CBC|PKCS5');
decoder.initSync(cryptoFramework.CryptoMode.DECRYPT_MODE, symKey, ivParamsSpec);
let decryptUpdate = decoder.doFinalSync(encryptMess);
let result = buffer.from(decryptUpdate.data).toString('utf-8')
return result
} catch (e) {
return ""
}
}
目前存在两组数据,其中A数据可以解密,B数据无法解密。
示例参考如下: