特性 `rand_core::CryptoRng` 没有为 `OsRng` 实现

问题描述

我一直在尝试实现以下文档中给出的示例:https://docs.rs/ed25519-dalek/1.0.1/ed25519_dalek/

我的代码很简单:

extern crate rand;
extern crate ed25519_Dalek;


use rand::rngs::OsRng;
use ed25519_Dalek::Keypair;


fn main() {
    let mut csprng = OsRng{};
    let keypair: Keypair = Keypair::generate(&mut csprng);
}

但是当我尝试运行时,我收到一条错误消息,指出 CryptoRng 特征未在 OsRng

中实现
11  |     let keypair: Keypair = Keypair::generate(&mut csprng);
    |                                              ^^^^^^^^^^^ the trait `rand_core::CryptoRng` is not implemented for `OsRng`

然而,CryptoRng 只是一个标记特征,我看到它确实对 OsRng一个空的实现...

那么这里可能有什么问题?

解决方法

通常,当您收到这些令人困惑的消息时,在明确满足时说“未满足特征绑定”,或者在显然是正确类型时说“错误类型”,您应该始终检查包版本。截至目前(ed25519-dalek v1.0.1),it depends on rand 0.7.0(您也可以在 crates.io 上找到)。您使用的是较新版本的 rand,具有“较新”版本的特征,并且在您提供 0.8.0 特征的同时寻找 0.7.0 特征。

解决方案?将 rand 降级到 0.7.0 或使用 dependency renaming to have 2 versions of rand,并为 ec25519-dalek 使用旧版本。

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...