From 5f4fff4f291e6b20d300804c4b23e3b48e37cd23 Mon Sep 17 00:00:00 2001 From: nukemiko Date: Sat, 22 Oct 2022 21:57:11 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E6=94=B9=20README.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 57 ++++++++++++++++++++++++++++++++++++++++++++++++------- 1 file changed, 50 insertions(+), 7 deletions(-) diff --git a/README.md b/README.md index e1d7f1c..ce42d23 100644 --- a/README.md +++ b/README.md @@ -12,20 +12,26 @@ **本项目现在不会内置任何解密所需的密钥。你需要自行寻找解密所需密钥或加密参数,在调用时作为参数传入。** -你可以在内容提供商的应用程序中查找这些必需参数,或寻求他人的帮助,但请**不要在本仓库下的 Issues 或讨论区中报告“缺少内置密钥”、“不能免密钥/一键解密”之类的问题,否则你的 Issue 会被立即关闭。** +你可以在内容提供商的应用程序中查找这些必需参数,或寻求他人的帮助,但请**不要在本仓库下的 Issues 或讨论区中报告“缺少内置密钥”、“不能免密钥/一键解密”之类的问题,你的此类 Issue 不会得到作者的回复。** **`libtakiyasha` 对输出数据的可用性(是否可以识别、播放等)不做任何保证。** --- -## 当前版本:2.0.0.dev0 +## 当前版本:[2.0.0.dev1](https://github.com/nukemiko/libtakiyasha/releases/tag/2.0.0.dev1) 此版本为开发版,如果发现任何 `libtakiyasha` 自身的问题,欢迎[提交 Issue](https://github.com/nukemiko/libtakiyasha/issues)。 +**`libtakiyasha` 2.x 版本不是向后兼容的,使用 1.x 版本的应用程序需要进行一些改造,才能使用 2.x 版本。** + +### 支持的格式 + +请在[此处](https://github.com/nukemiko/libtakiyasha/wiki/%E6%94%AF%E6%8C%81%E7%9A%84%E6%A0%BC%E5%BC%8F%E5%92%8C%E6%89%80%E9%9C%80%E5%AF%86%E9%92%A5%E5%8F%82%E6%95%B0)查看。 + ### 安装 -- 运行命令:`pip install -U libtakiyasha` -- 或者前往 [GitHub 发布页](https://github.com/nukemiko/libtakiyasha/releases) 下载安装 +- 运行命令:`pip install -U libtakiyasha==2.0.0.dev1` +- 或者前往 [GitHub 发布页](https://github.com/nukemiko/libtakiyasha/releases/tag/2.0.0.dev1) 下载安装 ### 基本使用方法 @@ -34,21 +40,32 @@ ```python from libtakiyasha import NCM, QMCv2 -... # 定义你提供的核心密钥 your_provided_core_key 和 your_provided_simple_key +... # 定义你提供的核心密钥 your_core_key、your_simple_key、your_mix_key1 和 your_mix_key2 -ncmfile = NCM.from_file('source.ncm', core_key=your_provided_core_key) +# 打开 NCM 文件 +ncmfile = NCM.from_file('source.ncm', core_key=your_core_key) target_file_format = ncm.ncm_tag.format with open('target_from_ncm.' + target_file_format, mode='wb') as fd: for block in ncmfile: fd.write(block) -qmcv2file = QMCv2.from_file('source.mflac', simple_key=your_provided_simple_key) +# 打开 QMCv2 文件 +qmcv2file = QMCv2.from_file('source.mflac', simple_key=your_simple_key) target_file_format = 'flac' with open('target_from_mflac.' + target_file_format, mode='wb') as fd: for block in qmcv2file: fd.write(block) + +# 也可以打开来自 QQ 音乐 PC 客户端 18.57 及更新版本的 QMCv2 文件, +# 但需要正确的 mix_key1 和 mix_key2 参数 +qmcv2file_keyencv2 = QMCv2.from_file('source.mflac', simple_key=your_simple_key, mix_key1=your_mix_key1, mix_key2=your_mix_key2) +target_file_format = 'flac' + +with open('target_from_mflac.' + target_file_format, mode='wb') as fd: + for block in qmcv2file_keyencv2: + fd.write(block) ``` - 打开加密文件时,如果不提供核心密钥,会报错而无法继续: @@ -63,3 +80,29 @@ with open('target_from_mflac.' + target_file_format, mode='wb') as fd: ValueError: 'simple_key' is required for QMCv2 file master key decryption >>> ``` + + 你需要向 `QMCv2.from_file()` 传入正确的 `simple_key` 参数才能打开文件。 + + 同样,你需要向 `NCM.from_file()` 传入正确的 `core_key` 参数才能打开 NCM 文件。 + +生成加密文件(以 QMCv2 为例): + +```python +from libtakiyasha import QMCv2 + +... # 定义你的 your_simple_key、your_mix_key1 和 your_mix_key2 + +new_qmcv2 = QMCv2.new() + +new_qmcv2.simple_key = your_simple_key # 可选,但如果跳过此步骤,在保存到文件时需要填写参数 simple_key + +with open('plain.flac', 'rb') as fd: + for line in fd: + new_qmcv2.write(line) + +# 保存为 QMCv2 KeyEncV1 +new_qmcv2.to_file('encrypted.mflac') + +# 也可以保存为 QMCv2 KeyEncV2 - QQ 音乐 PC 端 18.57 及更高版本的格式 +new_qmcv2.to_file('encrypted-keyencv2.mflac', master_key_enc_ver=2, mix_key1=your_mix_key1, mix_key2=your_mix_key2) +```