#assets #bundler #bevy #single-file #debugging

bevy_assets_bundler

bevy的资产捆绑器,支持内容加密

7个版本 (破坏性)

0.6.0 2023年3月8日
0.5.0 2022年12月22日
0.4.0 2022年8月9日
0.3.0 2022年4月16日
0.1.0 2021年8月16日

#649 in 加密学

每月49次下载

MIT许可

25KB
459 代码行

Bevy Assets Bundler

github action codecov dependency status loc License

crates.io docs.rs

支持内容加密的bevy资产捆绑器。当前归档格式为tar,加密算法为AES

特性

  • 将资产文件夹捆绑成一个单独的assets.bin文件
  • 使用自定义密钥加密资产
  • 资产文件名编码(关闭加密时为base58,否则为AES+base58)
  • 一个简单的开关,用于在调试构建中关闭捆绑

安装

# Cargo.toml
[dependencies]
bevy = "0.9"
bevy_assets_bundler = "0.5"

[build-dependencies]
bevy_assets_bundler = "0.5"

构建脚本

您可以使用 这个沙箱 生成随机密钥

use bevy_assets_bundler::*;

// build.rs
// encryption key: [u8; 16] array
// make sure the key is consistent between build.rs and main.rs
// or follow the example code to share code between build.rs and main.rs
fn main() {
    let key = [30, 168, 132, 180, 250, 203, 124, 96, 221, 206, 64, 239, 102, 20, 139, 79];
    let mut options = AssetBundlingOptions::default();
    options.set_encryption_key(key);
    options.encode_file_names = true;
    options.enabled_on_debug_build = true;
    AssetBundler::from(options).build();//.unwrap();
}

Bevy设置

use bevy_assets_bundler::*;
use bevy::{asset::AssetPlugin, prelude::*};

fn main() {
    // encryption key: [u8; 16] array
    // make sure the key is consistent between build.rs and main.rs
    // or follow the example code to share code between build.rs and main.rs
    let key = [30, 168, 132, 180, 250, 203, 124, 96, 221, 206, 64, 239, 102, 20, 139, 79];
    let mut options = AssetBundlingOptions::default();
    options.set_encryption_key(key);
    options.encode_file_names = true;
    options.enabled_on_debug_build = true;

    App::new()
        .add_plugins(
            DefaultPlugins
                .build()
                .add_before::<bevy::asset::AssetPlugin, _>(BundledAssetIoPlugin::from(
                    options,
                )),
        )
        .add_startup_system(setup)
        .run();
}

fn setup(mut commands: Commands, asset_server: Res<AssetServer>) {
}

选项

#[derive(Debug, Clone)]
pub struct AssetBundlingOptions {
    #[cfg(feature = "encryption")]
    pub encryption_on: bool,
    #[cfg(feature = "encryption")]
    pub encryption_key: Option<[u8; 16]>,
    #[cfg(feature = "compression")]
    pub enable_compression: bool,
    pub enabled_on_debug_build: bool,
    pub encode_file_names: bool,
    pub asset_bundle_name: String,
}

待办事项

  • 压缩
  • 更多加密算法

支持的Bevy版本

bevy bevy_assets_bundler
main bevy_main
0.10 0.6
0.9 0.5
0.8 0.4
0.7 0.3
0.6 0.2
0.5 0.1

示例

查看 示例端到端测试

运行示例: cargo run -p example

转到 target/release 文件夹,现在您可以移动example(.exe)和assets.bin到其他位置并运行,只需保持它们之间的相对路径即可。

免责声明

此库提供的加密机制无法保护您的资产免受所有类型的逆向工程,只要游戏可执行文件和资产捆绑包被分发给最终用户。

许可

MIT

依赖项

~21–60MB
~1M SLoC