Skip to content

Encrypts loaded Minecraft: Bedrock Edition resource packs (PocketMine-MP plugin)

License

Notifications You must be signed in to change notification settings

Muqsit/RPEncrypter

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

10 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

RPEncrypter

A PocketMine-MP plugin that automatically encrypts all loaded resource packs.

Just install the plugin and restart your server. All loaded resource packs (such as ones defined in your resource_packs/resource_packs.yml) will automatically be encrypted. This plugin uses your machine ID as the encryption key.

API

ResourcePackEncrypter::encrypt() encrypts resource packs with the supplied encryption-key.

/** @var PluginBase $plugin */
$rp_path = $plugin->getDataFolder() . DIRECTORY_SEPARATOR . "MyResourcePack.zip";

// encrypt MyResourcePack.zip
$encrypter = new ResourcePackEncrypter($plugin->getDataFolder());
$encryption_key = openssl_random_pseudo_bytes(32, $strong_result);
$file_encryption_keygen = fn(string $path, string $contents) => md5($path . $contents);
$info = $encrypter->encryptZip(new ZipArchive($rp_path), $encryption_key, $file_encryption_keygen);

// register encrypted resource pack
$manager = $plugin->getServer()->getResourcePackManager();
$stack = $manager->getResourceStack();
$stack[] = $info->pack;
$manager->setResourceStack($stack);
$manager->setPackEncryptionKey($info->pack->getPackId(), $encryption_key);

// hold reference to encrypted file's resource throughout server runtime
$plugin->encryptedResourcePackResource = $info->resource;

To generate static encryption keys (instead of random keys), consider using your machine ID.

use pocketmine\utils\Utils;

$machine_id = Utils::getMachineUniqueId()->getBytes();
$encryption_key = md5($machine_id); // 32-byte encryption key

Alternatively, generate a 32-length random string via 1Password and store it on your server somewhere.

$encryption_key = "6]xFaeMs9b)UnybZ?raH]*)PJ.Jx!3:0";