https://github.com/kevingimbel/passt
Rust CLI and library to generate good-enough random strings and passwords.
https://github.com/kevingimbel/passt
command-line-tool password-generator rust rust-library zero-dependencies
Last synced: 6 months ago
JSON representation
Rust CLI and library to generate good-enough random strings and passwords.
- Host: GitHub
- URL: https://github.com/kevingimbel/passt
- Owner: KevinGimbel
- License: apache-2.0
- Created: 2020-08-26T12:28:30.000Z (about 5 years ago)
- Default Branch: master
- Last Pushed: 2023-05-09T07:24:43.000Z (over 2 years ago)
- Last Synced: 2024-11-09T03:19:39.091Z (12 months ago)
- Topics: command-line-tool, password-generator, rust, rust-library, zero-dependencies
- Language: Rust
- Homepage:
- Size: 1.2 MB
- Stars: 5
- Watchers: 3
- Forks: 2
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE-APACHE
Awesome Lists containing this project
README
# passt
> The "good-enough" password generator ยฏ\\_(ใ)_/ยฏ
`passt` is a "zero-dependency" random string generator that can be used to generate passwords in terminals or in your application.
- [Zero Dependencies?](#zero-dependencies)
- [Supported operating systems](#supported-operating-systems)
- [*nix](#nix)
- [Windows Support](#windows-support)
- [Usage: library](#usage-library)
- [Usage: cli](#usage-cli)
- [Install](#install)
- [Limitations](#limitations)
- [Why the name "passt"](#why-the-name-passt)
- [License](#license)---
## Zero Dependencies?
`passt` only depends on Rust standard library, namely:
- `std::fs::File`
- `std::io::Read`and additionally for the CLI part:
- `std::env`
- `std::process::exit`and no other crates.
The only other "dependency" is `/dev/urandom` from which random ints are read to generate random values. So "zero-dependency" may be a bit of a stretch. ๐ฌ
## Supported operating systems
### *nix
All GNU/Linux / *nix systems should be supported as long as they have `/dev/urandom`. Only tested on MacOS and Ubuntu.
### Windows Support
For Windows `file:/dev/urandom` is read but this is **not yet tested**. It may or may not work. ๐คทโโ๏ธ Help with Windows support is appreciated!
## Usage: library
**Using the standard character set**
This means possible characters are:
- `a-zA-Z0-9` if no special chars are included
- `a-zA-Z0-9` and `!ยง$%&/()=?ยด-_.,:;#'+*<>ยฐ^` if special chars are included```rust
use passt::Passt;fn my_random_password() -> String {
// Passt::random_password(length: i32, with_special_chars: Option) -> String {
Passt::random_password(16, Some(false));
}fn my_random_password_with_none() -> String {
// Passt::random_password(length: i32, with_special_chars: Option) -> String {
Passt::random_password(16, None);
}fn my_random_password_with_special_chars() -> String {
Passt::random_password(16, Some(true));
}
```**Specify custom character set**
This allows you to use a different set of possible characters.
```rust
fn my_custom_set() {
// Create password only from random chars "acefhjlnprtvxz13579"
Pass::random_password_with_custom_set(16, "acefhjlnprtvxz13579")
}
```## Usage: cli
### Install
Install with `cargo`:
```bash
cargo install passt
```Then use as described below
```bash
USAGE: passt -l [-s] [-chars ""] [-n ]-l length of the generated password
-n number of passwords to create (default: 1)
-s use special characters
-chars possible characters as a string, e.g. "abc012"
```**No special characters**
```bash
$ passt -l 32
OgHFnTrSH5liCPhkrfbHdfhSWFwGGAPA
```**Include special characters**
```bash
$ passt -l 16 -s
D#ยง2ยงRgI0OuยฐF#
```**Custom character set**
Even with emojis!
```bash
$ passt -l 16 -chars "๐น๐ฅ๐๐ฆ๐ถ๐คณ๐ฎ"
๐๐ฎ๐ฎ๐ฎ๐คณ๐ฅ๐ฎ๐๐ฎ๐ฎ๐ฎ๐ฎ๐คณ๐ฎ๐ถ๐ถ$ passt -l 4 -chars "1234"
1341
```**Create multiple passwords**
```bash
$ passt -l 4 -n 12
Bw9a
I0CP
obhV
wpmT
0tMu
h2NG
AzGd
D3jb
FmrT
mlsX
UdiJ
NbAr
```## Limitations
Because the random extraction of characters is weak it is better to have duplicates in the character set. See the following example:
```bash
passt -l 4 -chars "10"
0000
```With two characters, the last char is always taken. For randomness, add more chars to the set.
```bash
passt -l 4 -chars "1010"
0100
```## Why the name "passt"
"passt" is a German word you can say if something is "okay". Since this tool is "okay" in generating random strings that can be used for passwords I found the name fitting.
## License
`passt` is primarily distributed under the terms of both the MIT license and the Apache License (Version 2.0).
See [LICENSE-APACHE](LICENSE-APACHE) and [LICENSE-MIT](LICENSE-MIT) for details.