2015-07-10 55 views
0

我想使用Crypto ++的自定義密鑰。我的程序使用隨機密鑰,但當我嘗試通過SecByteBlock密鑰時,出現intellisense錯誤。SecByteBlock將不接受字符串作爲自定義密鑰

參考here將其定義爲SecBlock (const T *t, size_type len)但我從未遇到過const T。

void EncryptFile(string cEncryptionKey, string cFilePath, string cTempFilepath) 
    SecByteBlock key_aes(pEncryptionKey, AES::DEFAULT_KEYLENGTH);//giving error 
    //SecByteBlock key_aes(ES::DEFAULT_KEYLENGTH); // Generates a random key 
+1

智能感知不是編譯器。編譯器會給你一個錯誤嗎? –

回答

2

SecByteBlockSecBlock< T, A >T = byte一個typedef。這三個構造函數是:

SecBlock (size_type size=0) 
SecBlock (const SecBlock< T, A > &t) 
SecBlock (const T *t, size_type len) 

沒有你正在嘗試使用的構造函數。這不存在:

SecByteBlock (const string& str, size_type size) 

所以,你只需要:

ASSERT(key.size() == AES::DEFAULT_KEYLENGTH); 
SecByteBlock key_aes(reinterpret_cast<const byte*>(key.data()), key.size()); 

您可能需要執行static_cast<size_t>(AES::DEFAULT_KEYLENGTH),但你通常沒有。如果您使用-Wextra,-Wsign-conversion-Wconversion,則可能需要。


退一步10,000英尺,你應該避免投入string的關鍵開始。

創建一個尺寸爲SecByteBlock(上面的第一個構造函數),並直接讀入它。然後,通過SecByteBlock參照EncryptFile


相關,我們只是在點我們得到一個乾淨的編譯-Wall,所以你應該能夠在您的項目。要使用清潔劑來源,您需要checkout from SVNclone from Git

相關問題