gpt4 book ai didi

c++ - 声明相同类型的变量并重用它们

转载 作者:搜寻专家 更新时间:2023-10-31 02:19:57 24 4
gpt4 key购买 nike

我有以下场景,想知道是否有好的解决方案。

我正在使用 Crypto++并声明如下:

if (_HashType == SHA1)
{
PKCS5_PBKDF2_HMAC<CryptoPP::SHA1> pbkdf;
pbkdf.DeriveKey(...)
}
else if (_HashType == SHA256)
{
PKCS5_PBKDF2_HMAC<CryptoPP::SHA256> pbkdf;
pbkdf.DeriveKey(...)
}
else if (_HashType == SHA384)
{
PKCS5_PBKDF2_HMAC<CryptoPP::SHA384> pbkdf;
pbkdf.DeriveKey(...)
}
else if (_HashType == SHA512)
{
PKCS5_PBKDF2_HMAC<CryptoPP::SHA512> pbkdf;
pbkdf.DeriveKey(...)
}

我想做的是这样的:

PKCS5_PBKDF2_HMAC<?> pbkdf;     
if (_HashType == SHA1)
PKCS5_PBKDF2_HMAC<CryptoPP::SHA1> pbkdf;
else if (_HashType == SHA256)
PKCS5_PBKDF2_HMAC<CryptoPP::SHA256> pbkdf;
else if (_HashType == SHA384)
PKCS5_PBKDF2_HMAC<CryptoPP::SHA384> pbkdf;
else if (_HashType == SHA512)
PKCS5_PBKDF2_HMAC<CryptoPP::SHA512> pbkdf;

pbkdf.DeriveKey(...)

有什么建议吗?

最佳答案

PKCS5_PBKDF2_HMAC<> 的通用基类是 PasswordBasedKeyDerivationFunction ,所以你可以做的是:

PasswordBasedKeyDerivationFunction* pbkdf;     
if (_HashType == SHA1)
pbkdf = new PKCS5_PBKDF2_HMAC<CryptoPP::SHA1>();
else if (_HashType == SHA256)
pbkdf = new PKCS5_PBKDF2_HMAC<CryptoPP::SHA256>();
else if (_HashType == SHA384)
pbkdf = new PKCS5_PBKDF2_HMAC<CryptoPP::SHA384>();
else if (_HashType == SHA512)
pbkdf = PKCS5_PBKDF2_HMAC<CryptoPP::SHA512>();

pbkdf->DeriveKey(...)

//...
delete pbkdf;

如果你使用的是C++11或更高版本,你可以使用智能指针,而不必担心内存管理:

std::unique_ptr<PasswordBasedKeyDerivationFunction> pbkdf;     

if (_HashType == SHA1)
pbkdf.reset(new PKCS5_PBKDF2_HMAC<CryptoPP::SHA1>());
else if (_HashType == SHA256)
pbkdf.reset(new PKCS5_PBKDF2_HMAC<CryptoPP::SHA256>());
else if (_HashType == SHA384)
pbkdf.reset(new PKCS5_PBKDF2_HMAC<CryptoPP::SHA384>());
else if (_HashType == SHA512)
pbkdf.reset(PKCS5_PBKDF2_HMAC<CryptoPP::SHA512>());

pbkdf->DeriveKey(...)

关于c++ - 声明相同类型的变量并重用它们,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33242428/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com