簡體   English   中英

使用constexpr和CryptoPP進行編譯時哈希

[英]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類可能不是字面友好的。 我可以使用更好(或可行)的替代方法嗎?

筆記:

  • 如果可能的話,我寧願使用Crypto ++庫
  • SHA3​​會很好,但是任何安全的哈希都可以
  • 如果我不能編譯時哈希,我有什么選擇?
  • 我已經研究了可能的重復項,但是似乎沒有一個可以揭示constexpr函數中用於復雜代碼的任何方法。
  • 我正在Qt Creator中使用內置的編譯器,它是MinGW 32位。

您說的是編譯時。 你真的是那個意思嗎 這意味着將用戶定義的字符串文字聲明為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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM