在C++中实现公钥加密的简单方法?

lau*_*ent 5 c++ encryption pgp signature

我希望能够签署一个文件.我的意思是,收件人可以检查该文件确实来自我,并可以查看其内容.有没有简单的方法在C++中做到这一点?

我刚看了一下维基百科上的PGP文章,但他们在"散列,数据压缩,对称 - 密钥加密,最后是公钥加密"的中间失去了我.理想情况下,我想要一个具有功能signString(string, privateykey)且接收者具有功能的库readSignedString(string, publickey).有什么建议吗?

编辑:

我不确定我是否使用正确的方法,所以这就是我想要做的:

我想在我的桌面应用程序中实现一些简单的盗版保护.因此,当用户购买许可证时,我会向他们发送包含其姓名和电子邮件的签名文件.然后,用户安装该文件,应用程序将其读取:它检查签名有效性并显示名称/电子邮件(在"关于"框中).为了确保破解者无法生成这些文件,我需要确保解密文件的密钥与加密文件的密钥不同.有没有简单的方法来实现这个?

Omr*_*rel 6

OpenSSL几乎就是您所需要的.它没有两个这样的功能,但它几乎一样容易.首先,每个数字签名都需要哈希算法.原因是你没有加密文件,你只加密文件哈希(否则需要很长时间来验证).

使用OpenSSL,您可以使用以下内容:

#include <openssl/evp.h>

EVP_MD_CTX ctx;
unsigned char signature[SIGNATURE_LEN];
int signature_len;

EVP_SignInit(&ctx, EVP_sha1());
EVP_SignUpdate(&ctx, data, size);
EVP_SignFinal(&ctx, signature, &signature_len, pkey);
Run Code Online (Sandbox Code Playgroud)

和几乎相同的验证签名,只使用EVP_ValidateInit,EVP_ValidateUpdateEVP_ValidateFinal.最后一个函数返回0/1,表示验证是否成功.

您仍然需要将密钥放入应用程序中,有很多功能可以执行此操作,具体取决于您从哪里读取它(文件/内存/证书等)


lau*_*ent 0

有关信息,在尝试了此处的大部分建议后,我最终使用了 openpgp 命令行工具。UPX 后它非常轻量级,它是跨平台的,并且以简单的方式满足我的需要。