You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将crypto::sha2::Sha256哈希转为&[u8]并生成ED25519密钥对?

解决rust-crypto中SHA256哈希转ED25519种子的问题

嘿,我来帮你搞定这个问题!你现在的核心困惑在于:手里的Sha256实例是正在计算哈希的工具,而不是最终生成的哈希字节数组——ed25519::keypair需要的是一个32字节的切片(刚好是SHA256哈希的固定长度),所以我们得先把哈希值从计算器里取出来,再传给密钥生成方法。

修改后的完整代码

extern crate crypto; // rust-crypto = "0.2.36"
use crypto::ed25519;
use crypto::sha2::Sha256;
use crypto::digest::Digest;

fn main() {
    let phrase = "purchase hobby popular celery evil fantasy someone party position gossip host gather";
    let mut hasher = Sha256::new();
    hasher.input_str(&phrase);
    
    // 准备一个32字节的缓冲区,刚好匹配SHA256的输出长度
    let mut seed = [0u8; 32];
    // 把计算好的哈希值写入缓冲区
    hasher.result(&mut seed);
    
    // 现在seed就是符合要求的&[u8]切片了
    let (_priv, _publ) = ed25519::keypair(&seed);
}

关键细节说明

  • 我把原来的seed变量改名为hasher,这样语义更准确——它是哈希计算的载体,不是最终的种子。
  • 创建[0u8; 32]固定大小数组是因为SHA256的输出长度是固定32字节,这样能避免缓冲区大小不匹配导致的panic。
  • hasher.result(&mut seed)方法会把计算完成的哈希值填充到我们准备的数组里,之后数组可以自动转为&[u8]切片,完美匹配keypair的参数要求。

如果想更严谨一点,也可以用hasher.output_bytes()获取哈希输出的预期长度,再动态创建缓冲区,但SHA256的长度是固定的,直接写死32字节完全没问题。

内容的提问来源于stack exchange,提问作者l5y

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.26 08:38:21