Sample code for 30+ languages & platforms
Rust

Generating Repeatable Random Data for Testing/Debugging

See more PRNG Examples

Demonstrates how to use the Fortuna PRNG to generate random-looking but repeatable non-random data for the purpose of testing and debugging.

Chilkat Rust Downloads

Rust

// This example assumes the Chilkat API to have been previously unlocked.
// See Global Unlock Sample for sample code.

let _ = false;

let fortuna = chilkat::Prng::new();

// Normally an application would seed the PRNG with entropy from
// some real random source.  However, sometimes we want the same
// random sequence of bytes for testing and debugging purposes.
// This a reason why GetEntropy and AddEntropy are two different methods.
// An application could omit the call to GetEntropy, and instead pass
// non-random data to AddEntropy. For example:

// Seed the PRNG with non-entropy, so we get a repeatable sequence.
// Note: AddEntropy can be called any number of times.
let _ = fortuna.add_entropy("01020304", "hex").is_ok();
let _ = fortuna.add_entropy("hello world", "ascii").is_ok();

// Generate some random data:
let mut str_rand_hex = fortuna.gen_random(16, "hex").unwrap_or_default();
let mut str_rand_base64 = fortuna.gen_random(22, "base64").unwrap_or_default();
let mut str_rand_base58 = fortuna.gen_random(32, "base58").unwrap_or_default();

println!("hex random bytes: {}", str_rand_hex);
println!("base64 random bytes: {}", str_rand_base64);
println!("base58 random bytes: {}", str_rand_base58);

// Try it again with a different object to verify that the same results are obtained:
let fortuna2 = chilkat::Prng::new();

let _ = fortuna2.add_entropy("01020304", "hex").is_ok();
let _ = fortuna2.add_entropy("hello world", "ascii").is_ok();

str_rand_hex = fortuna2.gen_random(16, "hex").unwrap_or_default();
str_rand_base64 = fortuna2.gen_random(22, "base64").unwrap_or_default();
str_rand_base58 = fortuna2.gen_random(32, "base58").unwrap_or_default();

println!("hex random bytes: {}", str_rand_hex);
println!("base64 random bytes: {}", str_rand_base64);
println!("base58 random bytes: {}", str_rand_base58);