使用 ether.rs 将私钥转换为字符串

Convert private key to string using ether.rs

提问人:Muhammad Waleed 提问时间:6/25/2023 更新时间:7/16/2023 访问量:478

问:

我是 rust 的新手,目前正在探索库。我想在控制台上打印钱包的私钥,首先我正在构建一个助记词。ethers.rs

let mnemonic = Mnemonic::<English>::new(&mut rand::thread_rng());

现在使用这个助记符,我想提取私钥。我知道一个助记词可以有多个私钥,但我想提取第一个私钥。为此,我做了这样的事情。

let key = mnemonic.derive_key("m/44'/60'/0'/0/0", None).unwrap()

这给了我类型的输出。我无法理解我如何使用这种类型,因为它不包含任何以字符串形式为我提供私钥的函数,因此我可以将其打印到控制台。任何帮助将不胜感激。XPriv

这是我的全部功能

async fn test() {
    let mnemonic = Mnemonic::<English>::new(&mut rand::thread_rng());

    println!("mnemonic: {}", mnemonic.to_phrase());

    let key = mnemonic
        .derive_key("m/44'/60'/0'/0/0", None)
        .expect("Failed to derive pkey");
}

这是我的cargo.toml

name = "rust-basics"
version = "0.1.0"
edition = "2021"

# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html

[dependencies]
ethers="2.0.7"
tokio = { version = "1", features = ["full"] }
bip39 = "2.0"
rand = "0.8"
dialoguer = "0.10.4"
serde = "1.0.164"
serde_json = "1.0.97"
password-hash = "0.5.0"
bcrypt = "0.14.0"
rust rust-cargo 私钥 ethers.js 助记符

评论

2赞 user207421 6/25/2023
为什么?私钥应该是秘密。在控制台上打印它们是一个非常糟糕的主意。
0赞 Muhammad Waleed 6/25/2023
该软件包应该在用户计算机上本地运行,我想使用密码加密私钥,然后本地保存在文件中。但首先,我需要字符串形式的私钥。
0赞 user207421 6/25/2023
私钥通常存储在 PCKS#11 密钥库中,这些密钥库已经有密码并且已经是安全的。这项技术已经存在。将其打印到控制台不构成加密,您无需将任何内容转换为字符串来对其进行加密。
0赞 isaactfa 6/25/2023
我对密码学了解不多,所以可能会听@user207421。但仅供参考,有一个编码器特征
0赞 Muhammad Waleed 6/25/2023
@user207421我正在尝试实现 Metamask 钱包类型的功能。Metamask是一个浏览器钱包。我想做与cli钱包相同的事情。为此,我需要保存用户的信息,无论是他们的助记词还是他们的私钥。因此,他们可以稍后再来,通过选择一个帐户并提供该帐户的密码,他们可以进行交易。

答:

1赞 ligulfzhou 7/16/2023 #1

我没有找到,但有:https://github.com/gakonst/ethers-rs/blob/master/examples/wallets/examples/mnemonic.rsMnemonicMnemonicBuilder

获取 后,可以使用以下代码获取私钥。wallet

let private_key = wallet
    .signer()
    .to_bytes()
    .iter()
    .map(|&i|format!("{:X}", i))
    .collect::<Vec<String>>()
    .join("");

希望它有所帮助。

评论

0赞 ligulfzhou 7/17/2023
@muhammad-waleed请试一试。
0赞 Muhammad Waleed 7/25/2023
这就像一个魅力。谢谢。你能解释一下代码吗?