2010-11-08 136 views
13

解密我找兩個函數概念上類似於這些:C/C++加密/與公鑰

// returns the encrypted text 
string encrypt(string public_key, string pass_phrase, string text); 
// returns the original text 
string decrypt(string private_key, string pass_phrase, string encrypted_text); 

其中string可能是char*,一個std::string什麼容易轉變爲這兩個。其中public_keyprivate_key基本上可以是任何東西,從使用某些命令(gpg/ssl或其他)生成的密鑰到使用其他簡單函數生成的密鑰。我已經研究了一些密碼學庫(libgcrypt,libgpgme,openssl ...),但它們看起來並不容易實現這些庫的功能:它們需要關於非對稱性的非表面知識加密和很多代碼。

無論如何,這個任務似乎並不少見。 如何實現上述兩個函數?

+2

你有沒有簽出Keyczar? http://code.google.com/p/keyczar/ – 2010-11-08 13:32:05

+0

encrypted_text可能是二進制數據。您需要注意嵌入的零。我會在原型中加入長度...... – pmg 2010-11-08 13:32:43

+0

@pmg:我意識到有一個[c] - 標籤,但我想peoro是在考慮C++的std :: string,它是8位整潔的,包含一個長度,與字符串的內容分開。 – 2010-11-08 13:37:23

回答

6

不幸的是,加密總是需要涉及的算法的非表面知識。很難得到正確的答案。 「應用密碼學手冊」是一個可用的各種算法的相對可讀的指南,所以它可能值得一看。您也可以嘗試cryptlib。它似乎有一個很好的分層設計,可以爲您提供大量參數的合理默認設置,因此您可以在不必過多擔心細節的情況下開始使用。

+2

嗯,我不太同意。我給這個簽名的兩個函數(加上另一個產生一個公鑰/私鑰對)應該足夠用於加密。當然,它們不是非常可定製的,所以它們不夠安全,不能用於某些嚴肅的事情,但我想它們對於99%的情況都是可以的...... – peoro 2010-11-08 13:51:42

+0

無論如何,我會看看cryptlib ,謝謝指出! – peoro 2010-11-08 13:51:57

+2

我建議你也改變你的函數簽名工作的字節,而不是字符串。加密通常在不透明的字節數組上工作,並且添加字符串語義會使事情變得更加困難。在這一層,密鑰只是一組字節,密碼是一組字節,清除/密文是兩組字節。它們*可以*表示具有某種字符編碼(ASCII,UTF-8或其他)的字符串,但密碼層不關心這一點。 – 2010-11-08 14:26:39

0

假設您不需要平臺無關的東西,下一代加密技術(CNG)是一種相對較新的Windows加密API,並且令人驚訝的直觀且易於使用。我寫了一篇文章,其中包含您在典型應用程序中可能需要的所有主要加密操作的示例。本文的示例代碼還爲使用Visual C++編譯器的這些操作提供了一個完整的工作示例。

http://msdn.microsoft.com/en-us/magazine/cc163389.aspx

對待公共和私有密鑰爲字符串,你可以簡單地使用Base64或類似的編碼。

+0

其實我正在研究Linux。不管怎麼說,還是要謝謝你! – peoro 2010-11-08 13:52:55

5

當有人要求簡單加密時,我只能推薦KeyCzar

它不僅提供了幾種語言(可以使用相同的密鑰)的乾淨的界面,而且還提供了處理密鑰旋轉等的機制。

當然,實現算法的安全默認值,以便您不必擔心技術細節。

真的,更好的方便&安全組合我到目前爲止見過。

+0

是不是keyczar只是openssl等包裝? – BjornW 2013-07-25 10:26:36

+1

@BjornWesen:是的。從鏈接* Keyczar被設計爲開放,可擴展和跨平臺兼容。它不打算替代現有的加密庫,如OpenSSL,PyCrypto或Java JCE,而**實際上是建立在這些庫**上的。(強調我的)KeyCzar的一個好處是它爲您選擇安全的默認值所以你不要在自己的腳下開槍。 – 2013-07-25 11:59:49

+0

是的,這當然是一個非常讚賞的目標:)我只是發現自己在相同的情況下需要一個輕量級的庫來做一些公共密鑰簽名/驗證,而且必須涉及openssl「只是」這樣做的想法沉重..我後來發現libtom這可能是很多事情都可以。 – BjornW 2013-07-25 23:47:27