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

Simple way to implement public-key cryptography in C++?

本文关键字:简单 方法 公钥加密 实现 c++      更新时间:2023-10-16

我希望能够签名一个文件。我的意思是,收件人可以检查文件是否确实来自我,并可以查看其内容。在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);

对于验证签名几乎相同,仅使用EVP_ValidateInit, EVP_ValidateUpdateEVP_ValidateFinal。最后一个函数返回0/1,表示验证是否成功。

您仍然需要将密钥获取到应用程序中,有相当多的函数可以做到这一点,这取决于您从哪里读取它(文件/内存/证书等)

您还可以使用Keyczar加密和解密您的文件。

但实际上你不能像这样破解你的程序,它使破解变得更加困难,但是破解者可以反汇编你的程序,找到检查这些签名文件有效性的函数,并将其更改为接受任何类型的文件

您可能想看看GNU版本的PGP, GnuPG,它使用一个名为libgcrypt http://directory.fsf.org/project/libgcrypt/的OSS库,它看起来能够做您想做的事情。

作为参考,在尝试了这里的大多数建议之后,我最终使用了openpgp命令行工具。它是非常轻量级的一旦UPXed,它是跨平台的,它做我需要一个简单的方式。