升级argon2-rs至0.5.3遇OsRng错误,如何适配rand 0.9?
解决方案
1. 升级chrono-tz到兼容rand 0.9的版本
把Cargo.toml里的chrono-tz从0.10.1升级到最新稳定版(比如0.13.0),这个版本不再依赖rand 0.8,会适配rand 0.9系列。修改后:
chrono-tz = "0.13.0"
2. 强制统一rand_core版本
在Cargo.toml里添加[patch.crates-io]配置,强制所有依赖使用和rand 0.9匹配的rand_core 0.7.x版本,解决多版本冲突问题:
[patch.crates-io] rand_core = { version = "0.7.6" }
rand 0.9.x对应的rand_core版本是0.7.x,这里用0.7.6是rand 0.9.5依赖的稳定版,同系列其他版本也可以。
3. 修正代码中的OsRng导入与使用
保持用rand::rngs::OsRng的导入,此时因为rand_core版本统一,rand::rngs::OsRng会自动实现argon2::password_hash::rand_core::CryptoRng trait。代码示例:
use rand::rngs::OsRng; use argon2::password_hash::SaltString; // 生成salt的代码可正常运行 let salt = SaltString::generate(&mut OsRng);
4. 验证依赖并构建
运行以下命令更新依赖并验证问题是否解决:
cargo update cargo check
如果还有问题,可运行cargo tree -p rand_core查看依赖树,确认所有依赖都使用了指定的0.7.x版本。
备选方案:无法升级chrono-tz时
如果因为项目限制不能升级chrono-tz,可尝试在Cargo.toml中禁用它的默认特性,去掉对rand的依赖(前提是项目用不到chrono-tz依赖rand的功能):
chrono-tz = { version = "0.10.1", default-features = false }
内容的提问来源于stack exchange,提问作者Code4R7
相关产品推荐
相关产品推荐

