lau*_*ent 5 c++ encryption pgp signature
我希望能够签署一个文件.我的意思是,收件人可以检查该文件确实来自我,并可以查看其内容.有没有简单的方法在C++中做到这一点?
我刚看了一下维基百科上的PGP文章,但他们在"散列,数据压缩,对称 - 密钥加密,最后是公钥加密"的中间失去了我.理想情况下,我想要一个具有功能signString(string, privateykey)且接收者具有功能的库readSignedString(string, publickey).有什么建议吗?
编辑:
我不确定我是否使用正确的方法,所以这就是我想要做的:
我想在我的桌面应用程序中实现一些简单的盗版保护.因此,当用户购买许可证时,我会向他们发送包含其姓名和电子邮件的签名文件.然后,用户安装该文件,应用程序将其读取:它检查签名有效性并显示名称/电子邮件(在"关于"框中).为了确保破解者无法生成这些文件,我需要确保解密文件的密钥与加密文件的密钥不同.有没有简单的方法来实现这个?
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_ValidateUpdate和EVP_ValidateFinal.最后一个函数返回0/1,表示验证是否成功.
您仍然需要将密钥放入应用程序中,有很多功能可以执行此操作,具体取决于您从哪里读取它(文件/内存/证书等)