rust(46)-随机数(3)
rand_jitter
基于定時抖動的非物理真隨機數發生器。
這是一個真正的隨機數生成器,而不是偽隨機數生成器。由JitterRng生成的隨機數可以看作是新的熵。其結果是,它比OsRng和PRNGs慢了一個數量級(大約103個數量級)。106慢)。
很少有情況下使用RNG是合適的。只有很少的應用需要真正的熵。正常的PRNG可能在統計上難以區分,而加密的PRNG也應該同樣無法預測。
JitterRng可以在沒有標準庫的情況下使用,但是不方便,您必須提供一個高精度的計時器,并且必須嚴格遵循JitterRng::new_with_timer的說明。
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 valueErr(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.76sRunning `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 uselet v1: u64 = rng.next_u64();println!("{:?}", v1);let v2: u64 = rng.next_u64();println!("{:?}", v2);let v3: u64 = rng.next_u64();println!("{:?}", v3); }總結
以上是生活随笔為你收集整理的rust(46)-随机数(3)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: python3精要(5)-python表
- 下一篇: VUE学习和开发中的注意点总结(一),便