rust - 如何使用 RustCrypto (ECDSA) 签署文件?
问题描述
我对 Rust 相当陌生,但我正在尝试构建一个类似于用 Rust 编写的 OpenSSL 的命令行工具。
我正在尝试使用Rust Crypto和 ecdsa crate 实现数字签名。我已经有一个散列文件,接下来的步骤如下:
- 生成私钥和公钥
- 用私钥加密哈希值(这将是我的签名)
现在我不确定如何使用 ecdsa crate。如何生成私钥?
解决方案
可以在文档中找到生成私钥的示例。它有点隐藏,因为密钥对生成特定于所使用的曲线:
use p256::{
ecdsa::{SigningKey, Signature, signature::Signer},
};
use rand_core::OsRng; // requires 'getrandom' feature
// Signing
let signing_key = SigningKey::random(&mut OsRng); // Serialize with `::to_bytes()`
请注意,ECDSA 的工作方式与 RSA 有点不同,因此您不要使用私钥“加密”散列(实际上,这对 RSA 也是一个不好的描述)。您将改用签名者,并且消息的散列通常被认为是其中的一部分。该示例还显示了如何执行此操作。
该文档非常糟糕,似乎 SHA-256 被用作下面的散列,但这不在此页面上。在我发现的源代码中:
impl ecdsa_core::hazmat::DigestPrimitive for NistP256 {
type Digest = sha2::Sha256;
}
所以我希望 Rust 用户确实了解如何设置/取消设置哈希。
推荐阅读
- spring - mvn liquibase:diff,每次生成相同的文件
- java - 如何在 Vaadin 14 中播放声音?
- ios - 无法在 iOS 13 上创建小型大写字母选择器
- laravel-5 - Laravel:从 .env 文件中删除凭据后,用户 ''@'localhost' 的访问被拒绝(使用密码:YES)
- asp.net-mvc - 在 azure 中安装水晶报表运行时
- iis - IIS - 尝试使用来自 webbrowser 的参数访问 DLL 文件得到 404 Not Found
- python - 加两次,结果为0
- mysql - 如何在 MySQL 中以三个一组的形式显示行
- angularjs - 为什么我收到 RangeError: Maximum call stack size exceeded 观察对父范围变量的更改(过滤的 ng-repeat 数组)?
- c# - “由于意外的数据包格式,握手失败”连接到 SFTP 服务器时出现 FluentFTP 错误