C语言编程实现RSA数字签名代码
时间: 2023-11-12 16:01:49 浏览: 218
下面是C语言实现RSA数字签名的代码示例:
```
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <openssl/rsa.h>
#include <openssl/pem.h>
int main()
{
// 加载私钥
RSA *rsa = NULL;
FILE *fp = fopen("private_key.pem", "r");
if (fp == NULL) {
printf("Failed to open private_key.pem\n");
return -1;
}
rsa = PEM_read_RSAPrivateKey(fp, NULL, NULL, NULL);
fclose(fp);
if (rsa == NULL) {
printf("Failed to load private key\n");
return -1;
}
// 读取待签名数据
char data[] = "123456";
int data_len = strlen(data);
// 计算签名
unsigned char sign[RSA_size(rsa)];
unsigned int sign_len;
if (RSA_sign(NID_sha1, (unsigned char *)data, data_len, sign, &sign_len, rsa) != 1) {
printf("Failed to sign data\n");
return -1;
}
// 打印签名结果
printf("Sign result: ");
for (int i = 0; i < sign_len; i++) {
printf("%02x", sign[i]);
}
printf("\n");
RSA_free(rsa);
return 0;
}
```
这段代码使用了 OpenSSL 库提供的 RSA_sign 函数来计算数字签名。需要注意的是,为了使用此函数,需要先加载私钥,代码中使用 PEM_read_RSAPrivateKey 函数从 PEM 格式的私钥文件中加载私钥。签名使用 SHA1 算法,可以根据需要修改为其他算法。
运行代码后,可以看到数字签名的结果以十六进制形式输出。
阅读全文