如何在 Crypto++ 中使用 RSA OAEP SHA-256 encrypt/decrypt 数据
How to encrypt/decrypt data using RSA OAEP SHA-256 in Crypto++
如何使用 SHA-256 填充而不是 Crypto++ 中的默认 SHA-1 填充来加密我的字符串数据?我无法找到任何方法来更改我的 encryption/decryption 函数使用的填充算法。我听说有些库有硬编码的填充方案,但我希望有一种方法可以修改 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::PublicKey
和RSA::PrivateKey
。 *rng
是一个 AutoSeededRandomPool
对象。
有什么方法可以添加 to/change 这些方法以使其正常工作?我是 C++ 的新手,所以请尽可能解释解决方案。
How can I encrypt my string data with SHA-256 padding instead of the default SHA-1 padding in Crypto++?
RSAES_OAEP_SHA_Encryptor
和 RSAES_OAEP_SHA_Decryptor
是类型定义:
$ 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
在模板的 >
之后保留额外的 space。旧版本的 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_TYPEDEF
是config_ns.h
中的一个宏。当 make docs
为 运行.
时,该宏有助于生成更好的文档
常规编译使用以下内容。
typedef RSAES<OAEP<SHA1> >::Encryptor RSAES_OAEP_SHA_Encryptor;
文档构建使用以下内容。构建文档时继承效果更好。
struct RSAES_OAEP_SHA_Encryptor : RSAES<OAEP<SHA1> >::Encryptor
{
};
如何使用 SHA-256 填充而不是 Crypto++ 中的默认 SHA-1 填充来加密我的字符串数据?我无法找到任何方法来更改我的 encryption/decryption 函数使用的填充算法。我听说有些库有硬编码的填充方案,但我希望有一种方法可以修改 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::PublicKey
和RSA::PrivateKey
。 *rng
是一个 AutoSeededRandomPool
对象。
有什么方法可以添加 to/change 这些方法以使其正常工作?我是 C++ 的新手,所以请尽可能解释解决方案。
How can I encrypt my string data with SHA-256 padding instead of the default SHA-1 padding in Crypto++?
RSAES_OAEP_SHA_Encryptor
和 RSAES_OAEP_SHA_Decryptor
是类型定义:
$ 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
在模板的 >
之后保留额外的 space。旧版本的 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_TYPEDEF
是config_ns.h
中的一个宏。当 make docs
为 运行.
常规编译使用以下内容。
typedef RSAES<OAEP<SHA1> >::Encryptor RSAES_OAEP_SHA_Encryptor;
文档构建使用以下内容。构建文档时继承效果更好。
struct RSAES_OAEP_SHA_Encryptor : RSAES<OAEP<SHA1> >::Encryptor
{
};