如果我们只有 public 键,如何使用 RSA/OAEP encrypt/decrypt

How to encrypt/decrypt using RSA/OAEP if we have public key only

我正在学习 Crypto++ 库。我已经阅读了很多示例,但没有找到如何在程序只能访问 public 密钥时如何 encrypt/decrypt 纯文本消息,当程序不生成密钥时。

CryptoPP::RSA::PublicKey pubKey;
pubKey.Load(CryptoPP::StringSource(SSL_PUB_KEY, true, new CryptoPP::Base64Decoder()).Ref());
CryptoPP::RSAES_OAEP_SHA_Encryptor e(pubKey);

但是之后怎么办呢?

如果您使用 public 密钥加密,您将使用私钥对其进行解密。这就是 rsa 的全部要点 - 非对称密钥加密,你需要密钥对。

RSA 还支持 "message signing",您使用私钥加密(通常是减少的 MAC 哈希),但随后您使用 public 密钥对其进行解密。

我知道怎么做了。我误解了 RandonGenerator 是什么,我认为我必须从密钥中获取它。

之后我执行以下操作:

CryptoPP::AutoSeededRandomPool rng;
string cipher;
CryptoPP::StringSource ss1(stringToEncrypt, true, new CryptoPP::PK_EncryptorFilter(rng, e, new CryptoPP::StringSink(cipher)));

现在我们已经在 cipher

中加密了数据