Coder Social home page Coder Social logo

libtakiyasha's Introduction

libtakiyasha

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 实现中通过了测试:

注意: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)

libtakiyasha's People

Contributors

nukemiko avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.