rsa对随机字符串签名 c语言
时间: 2023-10-26 10:20:31 浏览: 40
下面是一个使用RSA算法对随机字符串进行签名的C语言示例代码:
```c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <openssl/rsa.h>
#include <openssl/pem.h>
#define MAX_BUF_SIZE 1024
int main(int argc, char *argv[]) {
if (argc < 2) {
printf("Usage: %s <string to sign>\n", argv[0]);
return 1;
}
char *to_sign = argv[1];
// 1. 读取私钥
RSA *rsa = NULL;
FILE *fp = fopen("private_key.pem", "r");
if (fp == NULL) {
printf("Failed to open private key file.\n");
return 1;
}
rsa = PEM_read_RSAPrivateKey(fp, NULL, NULL, NULL);
fclose(fp);
if (rsa == NULL) {
printf("Failed to read private key.\n");
return 1;
}
// 2. 计算摘要
unsigned char md[MAX_BUF_SIZE];
unsigned int md_len = 0;
memset(md, 0, sizeof(md));
md_len = strlen(to_sign);
if (!RSA_sign(NID_sha256, (unsigned char *)to_sign, md_len, md, &md_len, rsa)) {
printf("Failed to sign the message.\n");
RSA_free(rsa);
return 1;
}
// 3. 输出签名
printf("Signature: ");
for (int i = 0; i < md_len; i++) {
printf("%02x", md[i]);
}
printf("\n");
RSA_free(rsa);
return 0;
}
```
需要注意的是,这里假设私钥已经存在于文件 `private_key.pem` 中,并且使用 SHA-256 算法计算摘要。在实际使用中,需要根据具体情况进行调整。