rust(46)-随机数(3)

rand_jitter
基于定时抖动的非物理真随机数发生器。
这是一个真正的随机数生成器,而不是伪随机数生成器。由JitterRng生成的随机数可以看作是新的熵。其结果是,它比OsRng和PRNGs慢了一个数量级(大约103个数量级)。106慢)。
很少有情况下使用RNG是合适的。只有很少的应用需要真正的熵。正常的PRNG可能在统计上难以区分,而加密的PRNG也应该同样无法预测。
JitterRng可以在没有标准库的情况下使用,但是不方便,您必须提供一个高精度的计时器,并且必须严格遵循JitterRng::new_with_timer的说明。

 cargo add rand_jitter
 

pub fn set_rounds(&mut self, rounds: u8)

配置用于生成每个64位值的轮数。这必须大于零,并且对性能和输出质量有很大的影响。
new_with_timer保守地使用64轮,但通常可以使用更少的轮。test_timer()函数返回全强度(平台相关)所需的最小轮数,因此可以使用rng.set_rounds(rng.test_timer()?);或缓存该值。
pub fn test_timer(&mut self) -> Result<u8, TimerError>
基本的定时器质量测试,通过测量CPU定时抖动几百次。
如果成功,这将返回收集64位熵所需的估计回合数。否则将返回一个带有失败原因的TimerError。

−]


pub enum Result<T, E> {
    Ok(T),
    Err(E),
}
Ok(T)

Contains the success value

Err(E)

Contains the error value
Result is a type that represents either success (Ok) or failure (Err).
See the std::result module documentation for details.

   Compiling learn47 v0.1.0 (F:\learn\rustlearn\learn47)
    Finished dev [unoptimized + debuginfo] target(s) in 0.76s
     Running `F:\learn\rustlearn\learn47\target\debug\learn47.exe`
5410982393200311058
11079485389792716384
14298778480130199918


------------------
(program exited with code: 0)

请按任意键继续. . .
extern crate rand_jitter;
use rand_jitter::JitterRng;
use crate::rand_jitter::rand_core::RngCore;

fn get_nstime() -> u64 {
    use std::time::{SystemTime, UNIX_EPOCH};

    let dur = SystemTime::now().duration_since(UNIX_EPOCH).unwrap();
    // The correct way to calculate the current time is
    // `dur.as_secs() * 1_000_000_000 + dur.subsec_nanos() as u64`
    // But this is faster, and the difference in terms of entropy is
    // negligible (log2(10^9) == 29.9).
    dur.as_secs() << 30 | dur.subsec_nanos() as u64
}


fn main() {
    let mut rng = JitterRng::new_with_timer(get_nstime);

    let _ = rng.next_u64();

    // Ready for use
    let v1: u64 = rng.next_u64();
    println!("{:?}", v1);
    let v2: u64 = rng.next_u64();
    println!("{:?}", v2);
    let v3: u64 = rng.next_u64();
    println!("{:?}", v3);    

 
}
发布了448 篇原创文章 · 获赞 13 · 访问量 5万+

猜你喜欢

转载自blog.csdn.net/AI_LX/article/details/104973078