在c++中实现公钥加密的简单方法
Simple way to implement public-key cryptography in C++?
我希望能够签名一个文件。我的意思是,收件人可以检查文件是否确实来自我,并可以查看其内容。在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_ValidateUpdate
和EVP_ValidateFinal
。最后一个函数返回0/1,表示验证是否成功。
您仍然需要将密钥获取到应用程序中,有相当多的函数可以做到这一点,这取决于您从哪里读取它(文件/内存/证书等)
您还可以使用Keyczar加密和解密您的文件。
但实际上你不能像这样破解你的程序,它使破解变得更加困难,但是破解者可以反汇编你的程序,找到检查这些签名文件有效性的函数,并将其更改为接受任何类型的文件
您可能想看看GNU版本的PGP, GnuPG,它使用一个名为libgcrypt http://directory.fsf.org/project/libgcrypt/的OSS库,它看起来能够做您想做的事情。
作为参考,在尝试了这里的大多数建议之后,我最终使用了openpgp命令行工具。它是非常轻量级的一旦UPXed,它是跨平台的,它做我需要一个简单的方式。
- 一种在C++中读取TXT配置文件的简单方法
- 当无法使用模板和宏时,生成类型变体C++代码的最简单方法是什么?
- CPU 瓶颈;处理具有许多非静态对象的 3D 场景渲染的简单方法
- 在OSX上使用CMake将Adobe的XMP工具包构建为共享库的最简单方法是什么?
- 通过比较C++中的行在 txt 文件中搜索的最简单方法是什么?
- 将时间戳打印到流的最简单方法
- 在C++中创建文件夹选取器对话框的最简单方法是什么?
- C++ 将静态方法转换为简单方法
- 将一系列数字映射到 CPP 中的值的简单方法
- 引用基类模板的成员变量的简单方法
- 学习数据结构和算法的简单方法
- boost::variant - 对变体应用算术的最简单方法
- 创建可以遍历 std::map 值的通用模板迭代器的最简单方法是什么?
- 在C++中将算术类型转换为 std::array 的最简单方法<uint8_t>
- 使用新运算符C++创建多维数组的简单方法
- C++-将ASCII字符数组中可能的数值转换为字符的最简单方法
- OpenSSL模块化最大数据类型大小的简单方法
- 获取当前按键的简单方法
- 多个 if-else 测试的更简单方法
- 为具有多个参数的函数创建 SWIG 类型图的更简单方法?