C++RSA生成数字签名
时间: 2023-07-11 11:28:44 浏览: 136
要生成数字签名,需要使用 C++ 的 RSA 库,例如 OpenSSL 库。以下是一个简单的示例代码,说明如何使用 OpenSSL 库生成数字签名:
```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 摘要算法和私钥。最后打印生成的数字签名。
需要注意的是,在实际应用中,应该使用公钥加密数字签名进行验证。同时,还需要保护私钥的安全性,防止私钥泄露导致数字签名被伪造。
阅读全文