使用Crypto ++对InvertibleRSAFunction和X509PublicKey的未定义引用?

时间:2018-04-19 04:38:32

标签: c++ eclipse crypto++

我试图弄清楚如何使用Crypto ++生成和使用RSA密钥。确切地说,我被要求:

  
      
  1. 您将实现两方之间的安全通信,Alice和   鲍勃。   为简单起见,将模拟从发送方向接收方发送消息   通过发送者将消息写入文件并阅读消息   来自接收器的文件。   此分配旨在实践密钥分发,加密/解密,
      和完整性保护   秘密密钥密码术和公钥密码术。

  2.   
  3. 通信场景:Alice(作为客户端)需要向Bob(作为服务器)发送消息。爱丽丝和鲍勃都有   一对RSA密码系统   (他们的关键   对是不同的),他们事先知道彼此的公钥   (公钥可以硬编码到程序中   或从文件中读取)。第1步:设置   共享密钥:Alice和Bob使用以下
    设置共享密钥   方法:Alice生成   随机密钥k,使用Bob的公钥和RSA对其进行加密   算法,并将密文发送给Bob。 Bob收到密文,然后对其进行解密   得到钥匙k。

  4.   

所以,我花了几个小时试图正确设置它,似乎我终于让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

我会问我需要做些什么来使这两个编译,但我甚至不确定这个示例代码甚至做了我想要的。我如何生成我需要的密钥?

0 个答案:

没有答案