多种加密方案的 Python 实现
Project description
LibTakiyasha
LibTakiyasha 是一个 Python 音频加密/解密工具库(当然也可用于加密非音频数据),支持多种加密文件格式。LibTakiyasha 不提供任何命令行或图形界面支持。
使用前必读
本项目是以学习和技术研究的初衷创建的,修改、再分发时请遵循 License。
本项目的设计灵感,以及部分解密方案,来源于同类项目:
本项目不内置任何密钥,要正常打开/保存任何类型的加密文件,你需要提供正确的对应的密钥。你需要自行寻找解密所需密钥或加密参数,在调用时作为参数传入。
如果你要解密别人提供的文件,你可以从提供者处索要密钥,或者寻求同类项目和他人的帮助。
LibTakiyasha 对输出数据的可用性(是否可以识别、播放等)不做任何保证。
新变化?
请参阅变更记录。
(如果你是在 PyPI 上浏览本 README,以上链接是无效的;变更记录可能会出现在页面的底部。)
特性
- 使用纯 Python 代码编写
- 兼容 Python 3.8 及后续版本,兼容多种 Python 解释器实现
- 可在此处查看具体兼容哪些实现
- 易于阅读,方便 Python 爱好者学习
- (包括依赖库)无任何 C/C++ 扩展模块,跨平台性强
- 兼容 Python 3.8 及后续版本,兼容多种 Python 解释器实现
- 支持四种加密文件:
- 网易云音乐加密文件
.ncm
- QQ 音乐加密文件 QMCv1
.qmc[0-9]
、.qmcflac
、.qmcogg
、.qmcra
等 - QQ 音乐加密文件 QMCv2
.mflac[0-9]
、.mgg[0-9]
等 - 酷狗音乐加密文件 KGM/VPR
.kgm
、.vpr
- 不支持创建新加密文件
- 酷我音乐加密文件
.kwm
- 更多信息,请参见此处
- 网易云音乐加密文件
注意:LibTakiyasha 的所有操作都不是线程安全的。尽量不要尝试在多线程环境下使用 LibTakiyasha 的任何功能。
性能表现
参见此处。
安装
可用的最新版本:2.1.1,GitHub 发布页面,PyPI
安装方式
- 使用
pip
,通过 PyPI 安装最新版本:python -m pip install -U libtakiyasha
如果你要下载其他版本:
- PyPI:https://pypi.org/project/libtakiyasha/#history ,挑选自己所需的版本,下载安装包,手动安装。
- 或者使用 pip 安装:
python -m pip install -U libtakiyasha==<你所需的版本>
- 或者使用 pip 安装:
- 前往发布页面挑选自己所需的版本,下载安装包,手动安装。
依赖项
LibTakiyasha 依赖以下包,均可从 PyPI 获取:
如何使用?
在这里可以找到使用方法和示例。
同时,在本项目的 Wiki 主页可以找到其他一些可能对你有用的东西。
常见问题
为什么 2.x 打开文件需要密钥,而 1.x 版本不需要?
这是出于以下考虑:
- LibTakiyasha 是一个加解密库,当然需要为用户提供自定义密钥的权利
- 为了保护本项目不受美国数字千年版权法Digital Millennium Copyright Act(DMCA)影响,避免仓库被误杀
- 因此,本仓库所有 1.x 及更早版本的提交和发布版本都已删除。
变更记录
版本 2.1.1.post1
- 修复了
import libtakiyasha
时因为缺少数据文件而抛出FileNotFoundError
,从而导致libtakiyasha
彻底无法使用的问题 - 将
libtakiyasha.ncm.CloudmusicIdentifier
加入顶层__init__.py
的导入内容
在这里查看更详细的变更记录。
版本 2.1.1
- 修复了各个模块的文件探测函数
probe_*()
的类型提示,现在PyCharm
、Pylance
等 IDE 和 LSP 应该会正确识别和显示它们的参数类型和返回类型 - 修改了
libtakiyasha.__init__
中导入的内容:不再导入常用模块ncm
、qmc
、kgmvpr
、kwm
、pkgmetadata
,而是直接导入这些模块中的常用函数、方法和类,可以在只导入了libtakiyasha
包后直接使用。- 可以在这里看到
libtakiyasha.__init__
中导入的内容。
- 可以在这里看到
- 为各个模块都添加了另一个文件探测函数
probeinfo_*()
,此函数与probe_*()
不同:probeinfo_*()
仅在输入文件是受支持的文件类型时才会返回探测结果(*FileInfo
对象),否则为None
;probe_*()
始终返回一个 2 元组:- 如果输入了文件路径,第一个元素是输入的路径使用
pathlib.Path
转换过的路径对象;如果输入了文件对象,第一个元素就是输入的文件对象 - 如果输入文件是受支持的文件类型,第二个元素是探测结果(
*FileInfo
对象);否则为None
- 如果输入了文件路径,第一个元素是输入的路径使用
libtakiyasha.qmc
中作为文件探测信息容器的QMCv1FileInfo
和QMCv2FileInfo
已被删除,它们的作用被QMCFileInfo
取代。这意味着不应该再使用内置函数isinstance()
判断 QMC 文件版本,转而通过访问探测结果的version
属性获得。
在这里查看更详细的变更记录。
版本 2.1.0
- 减少了一些重复代码的使用,删除了大量不再使用的代码
- 优化了判断是否为 QMCv1 文件的逻辑、QMCv2 文件的主密钥探测逻辑
libtakiyasha.qmc.QMCv2
的open()
和save()
现在可接受多个混淆密钥,通过关键字参数garble_keys
在需要时传入。- 因此,上述方法中原来的关键字参数
garble_key1
和garble_key2
已经被干掉了,请及时修改你的工具链。 - 如果提供此参数,需要提供一个产生至少一个混淆密钥(类字节对象)的可迭代对象(例如列表),且混淆密钥的顺序必须正确。
- 因此,上述方法中原来的关键字参数
在这里查看更详细的变更记录。
版本 2.0.1 至 2.1.0rc2
在这里查看更详细的变更记录。
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 Distribution
Built Distribution
Hashes for libtakiyasha-2.1.1.post1-py3-none-any.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | b92f9a2db245c1cd70e74118780c35dd8cf09ab4aac35d83221ad49060aa705a |
|
MD5 | 0f954b3c96577ff1a77dd576c8d014a0 |
|
BLAKE2b-256 | a8fa31ffe7dc86994b54f88c063917c04ed6bc5ece316d37a088f703e60cb31d |