用自己提供的RSA公私钥生成一个签名应该怎么写
时间: 2023-07-13 09:30:10 浏览: 106
要使用自己提供的 RSA 公钥和私钥生成数字签名,可以使用 OpenSSL 库中的函数 `RSA_sign()`。以下是一个示例代码,说明如何使用自己提供的 RSA 公钥和私钥生成数字签名:
```c++
#include <openssl/rsa.h>
#include <openssl/pem.h>
#include <openssl/err.h>
int main() {
// Load private key from file
FILE* fp = fopen("private_key.pem", "r");
RSA* rsa = PEM_read_RSAPrivateKey(fp, NULL, NULL, NULL);
fclose(fp);
// Generate SHA256 hash of the message
unsigned char message[] = "Hello, world!";
unsigned char hash[SHA256_DIGEST_LENGTH];
SHA256(message, strlen((const char*)message), hash);
// Sign the hash using RSA
unsigned char signature[RSA_size(rsa)];
unsigned int signature_len;
if (!RSA_sign(NID_sha256, hash, SHA256_DIGEST_LENGTH, signature, &signature_len, rsa)) {
printf("Error signing message.\n");
return 1;
}
// Print the signature
printf("Signature: ");
for (unsigned int i = 0; i < signature_len; i++) {
printf("%02x", signature[i]);
}
printf("\n");
RSA_free(rsa);
return 0;
}
```
在这个示例代码中,首先从文件中加载私钥,然后生成消息的 SHA256 哈希值。接着使用 RSA 签名函数 `RSA_sign()` 对哈希值进行签名,使用 SHA256 摘要算法和私钥。最后打印生成的数字签名。
需要注意的是,需要将自己的私钥存储在 `private_key.pem` 文件中,并且需要保证私钥的安全性,防止私钥泄露导致数字签名被伪造。同时,在实际应用中,应该使用公钥验证数字签名的有效性。
阅读全文