add base32 IDs
parent
cb68bc8f3f
commit
726dcba58b
25
src/lib.rs
25
src/lib.rs
|
@ -1,15 +1,32 @@
|
||||||
use rand::{seq::IndexedRandom as _, Rng as _};
|
use rand::{seq::IndexedRandom as _, Rng as _};
|
||||||
|
|
||||||
pub fn main() {
|
pub fn main() {
|
||||||
let passphrase = create_passphrase(" ", 8);
|
println!("{}", create_passphrase(" ", 8));
|
||||||
println!("{passphrase}");
|
println!("{}", create_pin(8));
|
||||||
let pin = create_pin(8);
|
println!("{}", create_base32(8));
|
||||||
println!("{pin}");
|
|
||||||
println!("Press Enter");
|
println!("Press Enter");
|
||||||
let mut input = String::new();
|
let mut input = String::new();
|
||||||
std::io::stdin().read_line(&mut input).ok();
|
std::io::stdin().read_line(&mut input).ok();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// Generates a Base32 string per RFC 4648, Section 6.
|
||||||
|
///
|
||||||
|
/// Wikipedia says this is the most popular encoding, and it's what
|
||||||
|
/// `base32` in GNU coreutils uses.
|
||||||
|
/// <https://en.wikipedia.org/wiki/Base32#Base_32_Encoding_per_%C2%A76>
|
||||||
|
///
|
||||||
|
/// This is useful for short IDs, e.g. bugs that aren't living in an issue
|
||||||
|
/// tracker. 8 characters of Base32 is 40 bits of entropy, which is
|
||||||
|
/// not enough for a password
|
||||||
|
pub fn create_base32(len: usize) -> String {
|
||||||
|
let encoding: Vec<_> = "ABCDEFGHIJKLMNOPQRSTUVWXYZ234567".chars().collect();
|
||||||
|
assert_eq!(encoding.len(), 32);
|
||||||
|
let chars = (0..len).map(|_| *encoding.choose(&mut rand::rng()).unwrap());
|
||||||
|
String::from_iter(chars)
|
||||||
|
}
|
||||||
|
|
||||||
|
/// Generates a diceware passphrase
|
||||||
pub fn create_passphrase(separator: &str, len: usize) -> String {
|
pub fn create_passphrase(separator: &str, len: usize) -> String {
|
||||||
let dice = Dice::default();
|
let dice = Dice::default();
|
||||||
let words: Vec<_> = (0..len).map(|_| dice.pick_word()).collect();
|
let words: Vec<_> = (0..len).map(|_| dice.pick_word()).collect();
|
||||||
|
|
Loading…
Reference in New Issue