gpt4 book ai didi

random - 如何使用 SeedableRng 生成随机数?

转载 作者:行者123 更新时间:2023-12-03 11:42:21 25 4
gpt4 key购买 nike

我有以下 Rust 代码,其最终目标是在给定公钥的情况下生成确定性用户名:

use openssl::pkey::{PKey, Private};
use rand::{Rng, SeedableRng};
use std::convert::TryInto;

pub struct MyRng([u8; 32]);

impl SeedableRng for MyRng {
type Seed = [u8; 32];

fn from_seed(seed: Self::Seed) -> MyRng {
MyRng(seed)
}
}

fn generate_username(keypair: &PKey<Private>) {
let public_bytes: Vec<u8> = keypair.public_key_to_der().unwrap();
let public_bytes: [u8; 32] = public_bytes.try_into().unwrap();
let seeded_rng: MyRng = SeedableRng::from_seed(public_bytes);

let num = rand::thread_rng().gen_range(0..32);
}
使用 rand::thread_rng()创建 ThreadRng允许我创建一个没有种子的随机数。如果我将最后一行更改为 seeded_rng.gen_range(0..32)然后我被告知找不到方法,并且特征 RngRngCore没有实现。但是,我不确定如何实现这些特征。
如何使用 [u8; 32] 的种子生成随机数?另外,我的代码有什么地方可以习惯性地改进吗? (例如,我有必要创建自己的结构吗?)

最佳答案

您需要使用具体的 Rng 实现。如果您不想添加更多依赖项,只需导入 rand::rngs::StdRng并使用 StdRng::from_seed(...)摆脱你的MyRng结构。
您的代码现在应该如下所示:

use openssl::pkey::{PKey, Private};
use rand::{rngs::StdRng, Rng, SeedableRng};
use std::convert::TryInto;

fn generate_username(keypair: &PKey<Private>) {
let public_bytes: Vec<u8> = keypair.public_key_to_der().unwrap();
let public_bytes: [u8; _] = public_bytes.try_into().unwrap();
let mut seeded_rng = StdRng::from_seed(public_bytes);

let num = seeded_rng.gen_range(0..32);
}

关于random - 如何使用 SeedableRng 生成随机数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66241471/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com