openssl ecdsa 代碼舉例
时间: 2024-05-08 07:13:32 浏览: 93
OpenSSL分析与测试
OpenSSL是一个常用的加密库,支持多种加密算法,其中包括ECDSA(Elliptic Curve Digital Signature Algorithm,椭圆曲线数字签名算法)。
下面是一个简单的ECDSA签名和验证的代码示例(使用secp256k1曲线):
```
#include <openssl/ec.h>
#include <openssl/ecdsa.h>
#include <openssl/obj_mac.h>
#include <openssl/rand.h>
int main()
{
// 初始化椭圆曲线
EC_KEY *eckey = EC_KEY_new_by_curve_name(NID_secp256k1);
if (!eckey) {
// 初始化失败
return -1;
}
// 生成公私钥对
if (!EC_KEY_generate_key(eckey)) {
// 生成失败
EC_KEY_free(eckey);
return -1;
}
// 签名消息
const char *msg = "Hello, world!";
size_t msglen = strlen(msg);
unsigned char hash[SHA256_DIGEST_LENGTH];
SHA256((unsigned char*)msg, msglen, hash);
ECDSA_SIG *sig = ECDSA_do_sign(hash, SHA256_DIGEST_LENGTH, eckey);
if (!sig) {
// 签名失败
EC_KEY_free(eckey);
return -1;
}
// 验证签名
int result = ECDSA_do_verify(hash, SHA256_DIGEST_LENGTH, sig, eckey);
if (result != 1) {
// 验证失败
EC_KEY_free(eckey);
return -1;
}
// 释放资源
EC_KEY_free(eckey);
ECDSA_SIG_free(sig);
return 0;
}
```
相关问题:
1. ECDSA是什么?如何工作?
2. OpenSSL中有哪些常用的加密算法?
3. 什么是椭圆曲线加密?为什么要使用它?
阅读全文