Python 音乐加解密工具库
Project description
libtakiyasha
![](https://pypi-camo.freetls.fastly.net/1170db353659d4ad13fa1e2dabe91d3e80e518e4/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f507974686f6e2d332e382532422d626c7565)
libtakiyasha
是一个 Python 音频加密/解密工具库(当然也可用于加密非音频数据),支持多种加密文件格式。
libtakiyasha
只是一个工具库,不提供任何命令行或图形界面支持。
本项目是以学习和技术研究的初衷创建的,修改、再分发时请遵循 License。
本项目的设计灵感,以及部分解密方案,来源于:
本项目不会内置任何解密所需的密钥。你需要自行寻找解密所需密钥或加密参数,在调用时作为参数传入。
你可以在内容提供商的应用程序中查找这些必需参数,或寻求同类项目以及他人的帮助。但请不要在 Issues/讨论区向作者索要所谓“缺失”的“内置密钥”,你的此类想法不会被满足。
libtakiyasha
对输出数据的可用性(是否可以识别、播放等)不做任何保证。
特性
- 纯 Python 实现(包括所有依赖关系),无 C/C++ 扩展模块,跨平台可用
- 支持多种加密文件格式的加密和解密
当前版本:2.0.1
此版本为正式版,但仍有不完美之处。如果发现任何 libtakiyasha
自身的问题,欢迎提交 Issue。
libtakiyasha
2.x 版本和 1.x 版本之间的接口并不兼容,使用 1.x 版本的应用程序需要进行大量改造,才能使用 2.x 版本。
另外,libtakiyasha
3.x 版本正在开发,有兴趣者可以切换分支查看。
支持的格式
请在此处查看。
兼容性
到目前为止(版本 2.0.1),libtakiyasha
已在以下 Python 实现中通过了测试:
- CPython(官方实现) 3.8 至 3.10,可能支持 3.11
- Pyston 2.3.5(基于 CPython 3.8.12),其他版本或许也可用
- PyPy 7.3.9(CPython 3.8 兼容版本、CPython 3.9 兼容版本)
注意:libtakiyasha
所需的最低 Python 版本为 3.8,因为它使用的很多 Python 特性从 Python 3.8 开始才出现,这意味着使用更低的 Python 版本会出现大量不可预知的错误。
提示:在作者运行的测试中,CPython 实现是速度最慢的;PyPy 比 Pyston 快了大约两倍,比 CPython 快了接近五倍。
安装
- 运行命令:
pip install -U libtakiyasha==2.0.1
- 或者前往 GitHub 发布页 下载安装
所需依赖关系
pyaes
- AES 加解密支持setuptools
- 安装依赖
如果你是通过上文提到的方式安装的 libtakiyasha
,这些依赖会被自动安装。
基本使用方法
提取加密文件里的音频内容:
from libtakiyasha.ncm import NCM
from libtakiyasha.qmc import QMCv2
... # 定义你提供的核心密钥 your_core_key、your_simple_key、your_mix_key1 和 your_mix_key2
# 打开 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:
# libtakiyasha 的所有透明加密文件对象(NCM、QMCv1、QMCv2、KGMorVPR、KWM 等)默认以固定大小的块(io.DEFAULT_BUFFER_SIZE)为单位进行迭代
# 通过修改对象的 iter_mode 属性为 'line',可以使其以一行为单位进行迭代
# 不过按行迭代会导致性能大幅下降,不推荐使用
for block in ncmfile:
fd.write(block)
# 打开 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)
-
打开加密文件时,如果不提供核心密钥,会报错而无法继续:
>>> from libtakiyasha import QMCv2 >>> qmcv2file = QMCv2.from_file('source.mflac') Traceback (most recent call last): File "<stdin>", line 1, in <module> <...> ValueError: 'simple_key' is required for QMCv2 file master key decryption >>>
你需要向
QMCv2.from_file()
传入正确的simple_key
参数才能打开文件。同样,你需要向
NCM.from_file()
传入正确的core_key
参数才能打开 NCM 文件。
生成加密文件(以 QMCv2 为例):
from libtakiyasha.qmc 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)
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distributions
Built Distribution
Hashes for libtakiyasha-2.0.1-py3-none-any.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 3f5f97c33e0b1470b422310e032807488acf75ef08304c41c45dfea3ef163cf2 |
|
MD5 | 351146a2fa8b8b33f09ad7aded236366 |
|
BLAKE2b-256 | cdf277fa34466864f92ac240dd510adddfef7241fbeb4fe21d7485beb622e27d |