我试图弄清楚如何使用Crypto ++生成和使用RSA密钥。确切地说,我被要求:
您将实现两方之间的安全通信,Alice和 鲍勃。 为简单起见,将模拟从发送方向接收方发送消息 通过发送者将消息写入文件并阅读消息 来自接收器的文件。 此分配旨在实践密钥分发,加密/解密,
和完整性保护 秘密密钥密码术和公钥密码术。- 醇>
通信场景:Alice(作为客户端)需要向Bob(作为服务器)发送消息。爱丽丝和鲍勃都有 一对RSA密码系统 (他们的关键 对是不同的),他们事先知道彼此的公钥 (公钥可以硬编码到程序中 或从文件中读取)。第1步:设置 共享密钥:Alice和Bob使用以下
设置共享密钥 方法:Alice生成 随机密钥k,使用Bob的公钥和RSA对其进行加密 算法,并将密文发送给Bob。 Bob收到密文,然后对其进行解密 得到钥匙k。
所以,我花了几个小时试图正确设置它,似乎我终于让Eclipse接受了Crypto ++库本身,因为它已经编译到这一点。这是我到目前为止的完整代码:
#include <iostream>
#include "cryptlib.h"
#include <rsa.h>
#include <osrng.h>
#include <base64.h>
#include <files.h>
using namespace CryptoPP;
int main()
{
std::cout << "!!!Hello World!!!" << std::endl; // prints !!!Hello World!!!
// InvertibleRSAFunction is used directly only because the private key
// won't actually be used to perform any cryptographic operation;
// otherwise, an appropriate typedef'ed type from rsa.h would have been used.
AutoSeededRandomPool rng;
InvertibleRSAFunction privkey;
privkey.Initialize(rng, 1024); <--
// With the current version of Crypto++, MessageEnd() needs to be called
// explicitly because Base64Encoder doesn't flush its buffer on destruction.
Base64Encoder privkeysink(new FileSink("c:\\privkey.txt"));
privkey.DEREncode(privkeysink);
privkeysink.MessageEnd();
// Suppose we want to store the public key separately,
// possibly because we will be sending the public key to a third party.
RSAFunction pubkey(privkey);
Base64Encoder pubkeysink(new FileSink("c:\\pubkey.txt"));
pubkey.DEREncode(pubkeysink); <--
pubkeysink.MessageEnd();
return 0;
}
我从这里开始试图了解这个库的工作原理: https://www.cryptopp.com/wiki/User_Guide:_rsa.h
(我们没有给出任何引物,我觉得这个网站有点令人困惑)
我目前遇到的当前问题是我用&#39;&lt; - &#39;标记的两条线。不编译。
具体做法是:
undefined reference to CryptoPP::InvertibleRSAFunction::Initialize(CryptoPP::RandomNumberGenerator&, unsigned int, CryptoPP::Integer const&)
undefined reference to CryptoPP::X509PublicKey::DEREncode(CryptoPP::BufferedTransformation&) const
我会问我需要做些什么来使这两个编译,但我甚至不确定这个示例代码甚至做了我想要的。我如何生成我需要的密钥?