Expand description
Enc_File
Encrypt / decrypt files or calculate hash from the command line. Warning: This crate hasn’t been audited or reviewed in any sense. I created it to easily encrypt und decrypt non-important files which won’t cause harm if known by third parties. Don’t use for anything important, use VeraCrypt or similar instead.
Breaking change in Version 0.3: Changed input of some functions. To encrypt/decrypt and hash use e.g. “encrypt_chacha(readfile(example.file).unwrap(), key).unwrap()”. Using a keymap to work with several keys conveniently. You can import your old keys, using “Add key” -> “manually”.
Breaking change in Version 0.2: Using XChaCha20Poly1305 as default encryption/decryption. AES is still available using encrypt_aes or decrypt_aes to maintain backwards compability.
Uses XChaCha20Poly1305 (https://docs.rs/chacha20poly1305) or AES-GCM-SIV (https://docs.rs/aes-gcm-siv) for encryption, bincode (https://docs.rs/bincode) for encoding and BLAKE3 (https://docs.rs/blake3) or SHA256 / SHA512 (https://docs.rs/sha2) for hashing.
Encrypted files are (and have to be) stored as .crpt.
Can be used as library and a binary target. Install via cargo install enc_file
Panics at errors making safe execution impossible.
Examples
use enc_file::{encrypt_chacha, decrypt_chacha, read_file};
//Plaintext to encrypt
let text = b"This a test";
//Provide key. Key will normally be chosen from keymap and provided to the encrypt_chacha() function
let key: &str = "an example very very secret key.";
//Convert text to Vec<u8>
let text_vec = text.to_vec();
//Encrypt text
//Ciphertext stores the len() of encrypted content, the nonce and the actual ciphertext using bincode
let ciphertext = encrypt_chacha(text_vec, key).unwrap(); //encrypt vec<u8>, returns result(Vec<u8>)
//let ciphertext = encrypt_chacha(read_file(example.file).unwrap(), key).unwrap(); //read a file as Vec<u8> and then encrypt
//Check that plaintext != ciphertext
assert_ne!(&ciphertext, &text);
//Decrypt ciphertext to plaintext
let plaintext = decrypt_chacha(ciphertext, key).unwrap();
//Check that text == plaintext
assert_eq!(format!("{:?}", text), format!("{:?}", plaintext));
use enc_file::{get_blake3_hash};
let test = b"Calculating the BLAKE3 Hash of this text";
let test_vec = test.to_vec(); //Convert text to Vec<u8>
let hash1 = get_blake3_hash(test_vec.clone()).unwrap();
let hash2 = get_blake3_hash(test_vec).unwrap();
assert_eq!(hash1, hash2); //Make sure hash1 == hash2
let test2 = b"Calculating the BLAKE3 Hash of this text."; //"." added at the end
let test2_vec = test2.to_vec();
let hash3 = get_blake3_hash(test2_vec).unwrap();
assert_ne!(hash1, hash3); //check that the added "." changes the hash and hash1 != hash3
See https://github.com/LazyEmpiricist/enc_file
Functions
Adds key to keymap. Taking a keymap “keymap_plaintext” and user provided password.
Allows user to choose desired hashing function. Returns result.
Creates a new keyfile. User can choose to create a random key or manually enter 32-long char-utf8 password in a keyfile. Key has to be valid utf8. Resturns result (password, keyfile and bool (true if new keyfile way created)).
Decrypts ciphertext (Vec
Decrypts ciphertext (Vec
Decrypts file. Taking a keymap “keymap_plaintext” and the choosen encryption “enc” (“chacha” for ChaCha20Poly1305 or “aes” for AES256-GCM-SIV). Returns result.
Examples
Encrypts cleartext (Vec
Encrypts file. Taking a keymap “keymap_plaintext” and the choosen encryption “enc” (“chacha” for ChaCha20Poly1305 or “aes” for AES256-GCM-SIV). Returns result.
Encrypt a given hashmap with a given password using ChaCha20Poly1305. Returns result (Vec
Get BLAKE3 Hash from data. File needs to be read as Vec
Reads userinput from stdin and returns it as String. Returns result.
Get SHA2-256 Hash from data. File needs to be read as Vec
Get SHA2-512 Hash from data. File needs to be read as Vec
Get SHA3-256 Hash from data. File needs to be read as Vec
Get SHA3-512 Hash from data. File needs to be read as Vec
Reads file from same folder as Vec
Read keyfile to keymap. Asks for userpassword. Returns result (password, keymap and bool(false as no new keymap was created))
Removes choosen key from keymap. Taking a keymap “keymap_plaintext” and user provided password.
Saves file to same folder. Returns result