2009-08-21 105 views
4

基本上我的問題是同一個確切爲這樣:簡單的客戶機/服務器,TCP/IP加密消息流,SSL(C++)

Simple client/server, TCP/IP encrypting the message stream, SSL

不同的是,我需要這對於純C++ ,而不是.NET。我不能使用第三方庫,所以除非它是一個Windows系統組件(如上所述),否則我需要一些源代碼,以便我可以獲得一致的想法並自己構建它。

謝謝:)

報價供參考的其他問題:

「寫一點TCP/IP客戶端服務器應用程序 基本上它創建了一個服務器, 然後你可以創建幾個 不同的客戶端和設置了一點點的 一個聊天會話。我在想什麼是 有什麼辦法可以加入,用 標準.net庫某種形式的 加密?

m_mainSocket = new 套接字(AddressFamily.InterNetwork, SocketType.Stream,ProtocolType.Tcp);

是否有任何方式使用rsa描述tcp ?

或者你會(我是)必須 編寫一些自定義libaries做關鍵 交換,然後加密 後續的聊天消息?我已經做了 之前對於單一但在 Java但我知道它不會很難 轉換它們。只是試圖不要有 重新發明輪...

或者如何利用ssl?

謝謝你,羅恩。」

+0

嗨,謝謝你的回答。 當我說「自己實現」時,我的意思是使用SSPI。這看起來相當容易,但我懷疑這可能是誤導性的,我不想犯任何愚蠢的錯誤,使解決方案變得脆弱。 它實際上是5 - 10年的舊代碼,有這個新的安全要求,FYI。 – Rabbit 2009-08-24 06:31:16

回答

0

編寫自己的加密代碼是「不推薦」。使用這些庫時很容易犯一個簡單的錯誤,更不用說當你試圖自己寫一個時。

你真正想使用的是OpenSSL和Boost.ASIO。如果你不能這樣做,那麼你的下一個最佳選擇是使用Internet Explorer COM對象。這不是非常靈活,但取決於您確切的需求,可能會工作得很好。您還可以探索Win32 API。最後,我看到沒有足夠的加密API可用於執行此操作。處理這個問題的最後一種方法是包裝.NET API,以便您可以使用本機C++中的這些API。

只有當這些都不適合你時,你甚至應該考慮自己寫這個。你會犯錯誤,因此你的應用程序的安全性會降低。因此,在開始嘗試編寫自己的加密代碼之前,您也可以嘗試通過SSH查看隧道SOCKS並使用其他人的SSH實現。接下來我要看的是在代碼中購買,而不是自己寫。代碼不會像開源​​軟件那樣好用,因爲它的使用會少一些,所以會有更多的安全問題,但它仍然會比你在第一次外出時寫的任何東西都要好。

只有當你已經用盡了所有這些選項時,才應該考慮自己寫這個。一旦你想到它,你應該再次嘗試所有其他的選擇,以確保你第一次沒有錯過讓他們中的一個爲你工作。

如果您仍然編寫自己的實現,那麼將其丟棄並在將其投入生產之前使用其他選項之一,因爲會出現危及安全性的錯誤,以至於您可能不太擔心。

對不起,所有這些都要聲明,但要讓這些事情正確真的很難,而不是通過快速瀏覽別人的實現就可以做到。

+0

謝謝。我仍然試圖在這裏制定出最好的解決方案,但是你所說的聽起來很合理。 感謝其他兩位貢獻者。 – Rabbit 2009-09-02 12:12:50

1

您可以隨時看OpenSSL它是開源的,但是這將是像自己實現SSL。我建議包裝OpenSSL和使用它。或者使用SSL隧道的應用OpenSSL中可用。