5.1.5. 从字母数字字符创建随机密码
问题:
你想从一组字母数字生成一个随机值,比如创建随机密码。
解决方案:
在 rand crate 的分布类型中,包含一个字母数字样本,范围为 A-Z,a-z,0-9
。因此我们可以使用字母数字样本,随机生成一个给定长度的 ASCII 字符串。
以下实例代码引用自开源书籍项目《Cookin’ with Rust》,笔者在其基础上稍作修改。
use rand::{thread_rng, Rng}; use rand::distributions::Alphanumeric; fn main() { let rand_string: String = thread_rng() .sample_iter(&Alphanumeric) .take(30) .collect(); println!(" 随机密码: {}", rand_string); }
代码第 1,2 行使用 use
关键字将相关模块引入作用域,其中 rand::distributions::Alphanumeric
是字母数字样本,范围为 A-Z,a-z,0-9
。
代码第 6,7 行使用 sample_iter
方法迭代从字母数字样本产生总长度为 30 的随机密码。
构建并运行后,结果大抵如下所示。
随机密码: vVvYkJpQhiBbrB7rVNvzHpzXOrmO7K
注:你的运行结果值和笔者运行结果不一定相同。
讨论:
rand::distributions::Alphanumeric
是字母数字样本,范围限定为 A-Z,a-z,0-9
,如果需要生成的随机值字符包括特殊字符,请参阅下一小节 5.1.6. 从用户定义字符创建随机密码。