2009-06-27 89 views
4

只要用戶登錄,基於C/C++的cgi web應用程序就會在服務器上創建一個臨時文本文件。當用戶註銷時,文本文件將被刪除。我想加密這個文本文件以及文件的內容。該文件將包含用戶名和密碼等信息。在C/C++中加密文本文件的最佳方式是什麼?

這樣做的最好方法是什麼?

編輯:我看到圖書館被建議。我的問題是我不能使用任何標準C++庫。

+0

另請參見http://stackoverflow.com/questions/674401/crypto-library-for-c – 2009-06-27 06:19:34

回答

2

當前被認爲是「安全」的加密標準是AES(也稱爲Rijndael)。您可以在Codeproject和許多其他地方找到C++實現。

請注意,使用AES或任何其他對稱加密標準時,您必須將加密/解密密鑰存儲在您的應用程序中。如果有人發現密鑰,他可以解密使用此密鑰加密的所有文件。

如果您的應用程序將在Windows下運行,您還可以使用DPAPI來存儲加密的信息。

+0

一個好主意是程序化生成密鑰,所以REing將變得更加困難。 RAM轉儲仍然是可能的,所以將密鑰保存爲非順序格式是一個優點。 – LiraNuna 2009-06-27 06:00:38

+0

「請注意,使用AES或任何其他對稱加密標準時,您必須將加密/解密密鑰存儲在您的應用程序中,如果有人發現密鑰,他可以解密使用此密鑰加密的所有文件。這正是您爲什麼/不能/將原始密鑰存儲在應用程序的可執行文件中的原因。密鑰應該由密碼或類似密碼保護。 – 2009-06-27 06:12:38

3

使用一個衆所周知的庫,如openssl,並遵循着名的examples,並遠離平臺特定的解決方案。

0

修回答案
您希望代碼加密和解密可以用於C++代碼的文件。
編寫自己的代碼絕對不正確(like this one)。

但是,你說你不能使用標準庫。
標準(也許是開源)庫可能是在您的應用程序中實現加密的最正確方法。如果您選擇這樣做,它留給你只有兩個選擇,

  • (由你犯的錯誤和危險的弱點)
  • 實現自己的標準加密算法的版本使用「系統」呼叫從您的應用程序中運行,並運行標準加密(如bcrypt),這可能會(希望)在您的系統上可用。

我仍然堅持拿起一個標準庫或將這樣一個開源代碼集成到我的應用程序中。請解釋什麼阻止你這樣做。


:出於某種原因,我想到了一個PHP代碼被要求......我的錯誤。
本文給出a PHP encryption symmetric program example using crypt將密碼存儲在文本文件中。

可能相關的問題#1

3

我想你可能會以這種錯誤的方式去做。如果安全性,真正的安全性是目標,那麼即使以加密的形式存儲密碼也不會存儲密碼(因爲如果密鑰被盜,它可以被解密,正如其他人所說的那樣)。

你應該做的是存儲密碼的散列(用適當的鹽)。這意味着沒有人(甚至不是網站管理員)可以確定用戶的密碼。他們只能接受一個密碼,看看它是否正確,或者用相同的鹽對輸入進行散列(不能顛倒散列)。

此外,這種情況很適合數據庫,你使用的是?

谷歌用鹽密碼哈希,你可以從真正的安全專家(我不是一個)瞭解它。

相關問題