如何在Crypto ++中使用RSA OAEP SHA-256加密/解密数据

时间:2019-12-28 02:40:52

标签: c++ encryption crypto++

如何使用SHA-256填充而不是Crypto ++中的默认SHA-1填充来加密我的字符串数据?我无法找到任何方法来更改我的加密/解密功能使用的填充算法。我听说有些库具有硬编码的填充方案,但我希望有一种方法可以修改Crypto ++使用的库。

这是我的加密方法:

string GUIMain::encryptData(const string data) {
    CryptoPP::RSAES_OAEP_SHA_Encryptor e(*serverPublic);
    string cipher;
    CryptoPP::StringSource ss1(data, true, new CryptoPP::PK_EncryptorFilter(*rng, e, new CryptoPP::StringSink(cipher)));
    return cipher;
}

这是我的解密方法:

string GUIMain::decryptData(const string cipher) {
    CryptoPP::RSAES_OAEP_SHA_Decryptor d(*privateKey);
    string recovered;
    CryptoPP::StringSource ss2(cipher, true, new CryptoPP::PK_DecryptorFilter(*rng, d, new CryptoPP::StringSink(recovered)));
    return recovered;
}

键(*serverPublic*privateKey)分别是对象类型RSA::PublicKeyRSA::PrivateKey*rngAutoSeededRandomPool对象。

我可以添加/更改这些方法以使其正常工作吗?我是C ++的新手,所以请尽可能解释解决方案。

1 个答案:

答案 0 :(得分:4)

  

如何使用SHA-256填充而不是Crypto ++中的默认SHA-1填充来加密我的字符串数据?

RSAES_OAEP_SHA_EncryptorRSAES_OAEP_SHA_Decryptor是typedef:

$ grep RSAES_OAEP_SHA_Encryptor *.h
rsa.h:DOCUMENTED_TYPEDEF(RSAES<OAEP<SHA1> >::Encryptor, RSAES_OAEP_SHA_Encryptor);

$ grep RSAES_OAEP_SHA_Decryptor *.h
rsa.h:DOCUMENTED_TYPEDEF(RSAES<OAEP<SHA1> >::Decryptor, RSAES_OAEP_SHA_Decryptor);

您可以改用以下内容:

 RSAES<OAEP<SHA256> >

所以您的加密器和解密器将是:

 RSAES<OAEP<SHA256> >::Encryptor
 RSAES<OAEP<SHA256> >::Decryptor

>之后保留模板的多余空间。 C ++语言的较旧版本需要它。否则,编译器会看到>>并认为它是提取运算符的一部分。


有几种类型定义,例如您正在使用的类型定义:

$ grep RSAES *.h
...
rsa.h:struct RSAES : public TF_ES<RSA, STANDARD>
rsa.h:/// \brief \ref RSAES<STANDARD> "RSAES<PKCS1v15>::Decryptor" typedef
rsa.h:DOCUMENTED_TYPEDEF(RSAES<PKCS1v15>::Decryptor, RSAES_PKCS1v15_Decryptor);
rsa.h:/// \brief \ref RSAES<STANDARD> "RSAES<PKCS1v15>::Encryptor" typedef
rsa.h:DOCUMENTED_TYPEDEF(RSAES<PKCS1v15>::Encryptor, RSAES_PKCS1v15_Encryptor);
rsa.h:/// \brief \ref RSAES<STANDARD> "RSAES<OAEP<SHA1>>::Decryptor" typedef
rsa.h:DOCUMENTED_TYPEDEF(RSAES<OAEP<SHA1> >::Decryptor, RSAES_OAEP_SHA_Decryptor);
rsa.h:/// \brief \ref RSAES<STANDARD> "RSAES<OAEP<SHA1>>::Encryptor" typedef
rsa.h:DOCUMENTED_TYPEDEF(RSAES<OAEP<SHA1> >::Encryptor, RSAES_OAEP_SHA_Encryptor);

DOCUMENTED_TYPEDEFconfig_ns.h中的宏。运行make docs时,该宏有助于生成更好的文档。

常规编译使用以下内容。

typedef RSAES<OAEP<SHA1> >::Encryptor RSAES_OAEP_SHA_Encryptor;

文档版本使用以下内容。构建文档时,继承可以更好地工作。

struct RSAES_OAEP_SHA_Encryptor : RSAES<OAEP<SHA1> >::Encryptor
{
};