[英]Compile-time hashing with constexpr and CryptoPP
我正在嘗試使用Crypto ++庫和constexpr
函數在編譯時對某些字符串進行哈希處理(不需要檢索它們)。 這是我到目前為止的代碼:
constexpr const char* operator "" _SHA3_HASH(const char *input, unsigned int length){
CryptoPP::SHA3_512 hash;
byte digest [CryptoPP::SHA3_512::DIGESTSIZE];
hash.CalculateDigest(digest, (byte*)input, length);
return (const char*) digest;
}
要使用: std::string passwordHash="password1234"_SHA3_HASH
我不認為有什么辦法可以CryptoPP::SHA3_512
起作用,因為CryptoPP::SHA3_512
類可能不是字面友好的。 我可以使用更好(或可行)的替代方法嗎?
筆記:
constexpr
函數中用於復雜代碼的任何方法。 您說的是編譯時。 你真的是那個意思嗎 這意味着將用戶定義的字符串文字聲明為constexpr
(AFIAK)是不可能的(我已經嘗試過)。
這留下了重新實現SHA3哈希作為具有以下簽名的constexpr模板函數的途徑:
template<size_t N>
constexpr custom_digest sha3_hash(const char (&source)[N])
{
// your constexpr-friendly code goes here
}
請記住,由constexpr函數調用的每個函數也必須是constexpr(即,僅處理文字類型或由其組成的constexpr用戶類型)。
是的, const char (&)[N]
是文字類型。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.