An open API service indexing awesome lists of open source software.

https://github.com/matschik/monozip

๐Ÿ” Utility library and CLI to encrypt/compress and decompress/decrypt zip folders using AES encryption
https://github.com/matschik/monozip

aes-encryption decryption encryption zip

Last synced: 4 months ago
JSON representation

๐Ÿ” Utility library and CLI to encrypt/compress and decompress/decrypt zip folders using AES encryption

Awesome Lists containing this project

README

          

# Monozip ๐Ÿ“ฆ๐Ÿ”‘

Utility library providing encrypt/compress and decompress/decrypt using **AES encryption** ๐Ÿ”.

With a simple API, you can easily zip and encrypt a directory and later unzip and decrypt it.

## Features ๐Ÿš€

- Generate encryption keys ๐Ÿ”‘
- Encrypt and zip folders ๐Ÿ“โžก๏ธ๐Ÿ”’๐Ÿ“ฆ
- Unzip and decrypt an encrypted zip folder ๐Ÿ“ฆโžก๏ธ๐Ÿ“‚๐Ÿ”“

## CLI Usage ๐Ÿ’ป

Monozip can be used directly from the command line. The general structure of a command is:

```bash
monozip [command] [options]
```

### Installation ๐Ÿ’พ

To use the cli, install globally with npm:

```bash
npm install -g monozip
```

### Usage ๐Ÿ“–

**To encrypt and zip a folder:**

You can specify an encryption key and an output path using the `-k` and `--output` options respectively. If not specified, a key will be generated automatically, and the output file will be saved in the current directory.

```bash
monozip encrypt ./path/to/folder
```

After running this command, it will print out the encryption key used (keep it safe, you will need it to decrypt ๐Ÿ”), and the path to the zipped file.

**To unzip and decrypt an encrypted zip file:**

You need to provide the encryption key and the path to the zipped file. You can also specify an output path using the `-o` option. If not specified, the file will be unzipped in the current directory.

```bash
monozip decrypt your-key ./path/to/file.zip
```

After running this command, it will print out the path to the unzipped and decrypted files.

## Programmatic Usage ๐Ÿ’ก

### Installation ๐Ÿ’พ

Install the library using npm:

```bash
npm install monozip
```

### Encryption and Compression ๐Ÿ”๐Ÿ“ฆ

To encrypt and zip a folder, you can use the `generateKey` and `encryptAndZipFolder` functions. Here is an example:

```javascript
import { generateKey, encryptAndZipFolder } from "monozip";

const folderPath = "downloads/myphotos";

// Generate a new encryption key
const secretKey = generateKey();

// Encrypt and zip the folder
await encryptAndZipFolder(secretKey, fixtureFolderPath);

console.info(`Encrypted with key ${secretKey} and zipped folder ${folderPath}`);
// Encrypted with key e96c9074fa... and zipped folder downloads/myphotos.zip. Keep the key safe!
```

### Decompression and Decryption ๐Ÿ“‚๐Ÿ”“

To unzip and decrypt a previously encrypted and zipped file, you can use the `unzipAndDecryptZip` function. Here is an example:

```javascript
import { generateKey, unzipAndDecryptZip } from "monozip";

// Assume the encryption key is known
const secretKey = "my-secret-key";

// Unzip and decrypt the zipped file
const zipPath = "downloads/myphotos.zip";
const outputPath = await unzipAndDecryptZip(secretKey, zipPath, {
outputPath: "downloads/myphotos-decrypted",
});

console.info(`Unzipped and decrypted ${outputPath}`);
// Unzipped and decrypted downloads/myphotos-decrypted
```

## Testing ๐Ÿงช

The project uses [Vitest](https://github.com/vitest-dev/vitest) for testing.

You can run the tests with:

```bash
npm test
```

## Contributing ๐Ÿค

We welcome contributions! Please see [here](./CONTRIBUTING.md) for details on how to contribute.

## License ๐Ÿ“„

This project is open source, licensed under the MIT License. See [LICENSE](./LICENSE) for details.