[−][src]Crate enc_file
Enc_File
Enc_File
is a simple tool to encrypt and decrypt files. 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.
Uses AES-GCM-SIV (https://docs.rs/aes-gcm-siv) for cryptography, bincode (https://docs.rs/bincode) for encoding and BLAKE3 (https://docs.rs/blake3) for hashing.
It's a binary target. Install via cargo install enc_file
See https://github.com/LazyEmpiricist/enc_file
Examples
use ::enc_file::{create_key, decrypt_file, encrypt_file, read_file, save_file}; use serde::{Deserialize, Serialize}; use std::env; use std::str::from_utf8; fn main() -> Result<(), Box<dyn std::error::Error>> { let args: Vec<String> = env::args().collect(); //args[0] will be the filename or the cargo command! if args.len() >= 2 { let operation = &args[1]; println!("Operation: {}", &operation); if operation == "encrypt" && args.len() == 4 { let filename = &args[2]; let keyfile = &args[3]; println!("File {}", &filename); println!("Keyfile: {}", &keyfile); let key = read_file(keyfile)?; let key: &str = from_utf8(&key)?; let content = read_file(&filename)?; let ciphertext: Vec<u8> = encrypt_file(content, &key)?; let new_filename: String = filename.to_owned() + ".crypt"; //println!("Ciphertext: {:?}", &ciphertext); save_file(ciphertext, &new_filename)?; println!("Successfully enrypted file to {:?}", &new_filename); } else if operation == "decrypt" && args.len() == 4 { let filename = &args[2]; let keyfile = &args[3]; println!("File {}", &filename); println!("Keyfile: {}", &keyfile); let key = read_file(keyfile)?; let key: &str = from_utf8(&key)?; let filename_decrypted: &str = &filename[0..filename.find("crypt").unwrap()]; let ciphertext = read_file(filename)?; //println!("Ciphertext read from file: {:?}", &ciphertext); //println!("Decrypted"); let plaintext: Vec<u8> = decrypt_file(ciphertext, &key)?; save_file(plaintext, filename_decrypted)?; println!("Successfully decrypted file to {:?}", &filename_decrypted); } else if operation == "create-key" && args.len() == 3 { let filename = &args[2]; println!("File {}", &filename); create_key(&filename)?; println!("Keyfile {:?} created", &filename); } else if operation == "hash" && args.len() == 3 { let filename = &args[2]; let hash = get_blake3_hash(&filename)?; println!("File: {}. BLAKE3 hash: {:?}", filename, hash); } } else { println!( r#"Use "encrypt filename-to_encrypt filename-keyfile" or "decrypt filename-to_decrypt filename-keyfile" or "create-key filename-keyfile" "# ); println!(r#"Example: "encrypt text.txt key.file""#); } Ok(()) }
Functions
create_key | Creates a new key from given charset. Does not use crypto_rand at this time. Returns result. |
decrypt_file | Decrypts ciphertext (Vec |
encrypt_file | Encrypts cleartext (Vec |
get_blake3_hash | Get BLAKE3 Hash from file. Returns result. |
get_sha256_hash | Get SHA256 Hash from file. Returns result. |
get_sha512_hash | Get SHA512 Hash from file. Returns result. |
read_file | Reads file from same folder as Vec |
save_file | Saves file to same folder. Returns result |