数字签名算法rsa c语言
时间: 2023-06-13 09:02:06 浏览: 67
RSA是一种非对称加密算法,可以用于数字签名。在C语言中,可以使用openssl库来实现RSA算法。以下是一个简单的示例代码:
```
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <openssl/rsa.h>
#include <openssl/pem.h>
#define KEY_LENGTH 2048
int main() {
int ret = 0;
RSA *rsa = NULL;
unsigned char *data = "Hello, world!";
unsigned char *signature = NULL;
unsigned int signature_len = 0;
FILE *fp = NULL;
// 生成RSA密钥对
rsa = RSA_generate_key(KEY_LENGTH, RSA_F4, NULL, NULL);
if (rsa == NULL) {
printf("RSA_generate_key error!\n");
return -1;
}
// 对数据进行签名
signature = (unsigned char *)malloc(RSA_size(rsa));
ret = RSA_sign(NID_sha256, data, strlen((const char *)data), signature, &signature_len, rsa);
if (ret != 1) {
printf("RSA_sign error!\n");
return -1;
}
printf("signature: ");
for (int i = 0; i < signature_len; i++) {
printf("%02X", signature[i]);
}
printf("\n");
// 将密钥写入文件
fp = fopen("private.pem", "wb");
if (fp == NULL) {
printf("fopen error!\n");
return -1;
}
PEM_write_RSAPrivateKey(fp, rsa, NULL, NULL, 0, NULL, NULL);
fclose(fp);
// 释放RSA密钥对和签名缓冲区
RSA_free(rsa);
free(signature);
return 0;
}
```
这段代码生成一个RSA密钥对,使用私钥对数据进行签名,并将私钥写入文件中。在实际使用中,需要使用公钥对签名进行验证。