我想使用OpenSSL rust crate来执行加密操作,特别是使用ECDSA算法。
我使用下面的代码来生成ECDSA密钥(椭圆曲线P-256 ),并使用它来签署数据和获取签名:
use openssl::sign::{Signer, Verifier};
use openssl::ec::{EcKey, EcGroup};
use openssl::pkey::PKey;
use openssl::hash::MessageDigest;
use openssl::nid::Nid;
// ec key
let group = EcGroup::from_curve_name(Nid::X9_62_PRIME256V1).unwrap();
let keypair = EcKey::generate(&group).unwrap();
let keypair = PKey::from_ec_key(keypair).unwrap();
// data to sign
let data = b"hello, world!";
// hash: sha-256
let mut signer = Signer::new(MessageDigest::sha256(), &keypair).unwrap();
let buf_size = signer.len().unwrap(); // Computes an upper bound on the signature length.
println!("buffer size {}", buf_size); // 72
let mut buf: [u8; 72] = [0; 72];
// sign
let exact_bytes = signer.sign_oneshot(&mut buf, data).unwrap(); //the number of bytes written.
println!("{}", exact_bytes); // 70
我不明白为什么< code>exact_bytes是70。以我的理解,应该是64。
对于签名过程中使用的曲线,ECDSA签名比签名者的私钥长2倍。例如,对于256位椭圆曲线(如secp256k1),ECDSA签名是512位(64字节),对于521位曲线(如secp521r1),签名是1042位。
有什么帮助吗?谢谢!
从这里看来,它还取决于签名所使用的编码,这可能会增加长度。
另外,解释了您对签名长度的理解,这与您所说的并不完全相同。
我想创建一个签名并使用openssl验证它。我想有我的签名的十六进制输出。 这是我的密码 我得到这个错误: 如果我在创建签名的过程中删除了-hex,它就可以工作了。
来自OpenSSL文档 使用命名曲线prime256v1(又名P-256)创建给定SHA-256散列值的ECDSA签名。 第二步:使用ECDSA_do_sign()计算SHA-256哈希值的ECDSA签名: 或使用ECDSA_sign(): 第三步:使用ECDSA_do_verify()验证创建的ECDSA签名: 或者使用ECDSA_verify(): 最后评估返回值: EOF 这使我认识到,我需
我使用OpenSSL(在C中)对文本进行签名,但是我的Java程序并不总是验证签名的消息(只有大约1/5得到验证)。有趣的是,https://kjur.github.io/jsrsasign/sample/sample-ecdsa.html没有证实其中任何一个: 曲线名称:secp256k1签名算法:SHA256with ECDSA 私钥 密钥 失败: 成功: 爪哇 C.
我正在尝试生成“原始”的未编码ECDSA签名,用于加密芯片。目标是在主机pc上签名,然后将其发送到芯片进行验证。然而,我遇到了一个小问题。我的理解是ECDSA签名应该是64字节(对于secp256v1)。而且,当我使用芯片生成签名时,它的长度确实是64字节。然而,当我使用openssl时,签名长度为71字节。签名的开头似乎是某种前缀,但我找不到关于它的任何数据。 以下是我尝试做每件事情的方式: 生
我正在尝试使用公钥验证散列的ECDSA签名。我写了一个小的围棋程序,成功地做到了这一点,但是我不能把它移植到C语言中。 这是我的输入数据: < li >公钥:< code > mfkwewyhkozizj 0 caqyikozij0 dackcdqgaedd 9 vxm phjv 4 vofo 0 zofplr r5 iczxquxsr 9 eka ouo 9 b 7 wl 1 daggi 0 e
要使用OpenSSL生成私钥和公钥,我已经运行 我将公钥上传到远程服务器。然后将导入。Net Framework(它必须是。Net Framework)C#服务使用它来签署API有效负载: 用上面的代码给出 如果我使用并运行它会生成一个名为的PKCS#12密钥,然后: 使用<code>privateKeyFile=private-key.pem。p12上面的代码似乎对请求进行了签名,但API响应为