簡體   English   中英

使用C#/ .Net中的異步套接字安全地傳輸二進制數據

[英]Transfer binary data securely using asynchronous sockets in C# / .Net

我們有一個用C#編寫的TCP / IP套接字服務器,用於將二進制文件傳輸到客戶端。 例如,剪輯,圖像。 帶有回調的異步BeginSend / EndSend用於發送byte []緩沖區。

新要求是加密正在傳輸的數據。 每個客戶端連接都將為服務器提供加密密鑰。 實際的加密算法並不重要,即目標是簡單地確保數據不是以明文形式發送的。 即使是帶有40位密鑰的RC2CryptoServiceProvider就足夠了......與RC2相比,使用128位密鑰的RijndaelManaged是一種過度殺傷,而且是CPU密集型的。

在傳輸數據文件之前,當然可以先生成加密版本的數據文件。 理想情況下,我們應該在文件中讀取數據並在套接字上發送時動態加密文件。 給定數據文件的大小,將整個文件內容讀取到內存既不高效也不可擴展。

在動態加密文件中的數據以發送到套接字對等體時,是否有一些好的模式可供遵循?

有幾種方法可以實現這一目標。 這里有一些:

  • 基礎架構 :與您的客戶建立啟用SSL / TLS的 VPN 使用新的專用網絡連接到客戶端的網絡。 Pro :代碼幾乎沒有變化,具體取決於您當前的實現。 Con :取決於您客戶的基礎設施(以及您的基礎設施!),可能無法實現。

  • SSL :在客戶端和服務器之間建立直接安全的套接字層連接。 :易於實施。 CodeProject上有一個關於如何通過MS SSPI SSL和OpenSSL實現它的示例,您可以將其用作您自己實現的基礎; 這是鏈接 Con :SSL在考慮實施之前,您應該了解一些眾所周知的安全問題

  • 常用算法 (AES,DES,Triple DES,Blowfish):您可以在發送之前和接收通信層上的包之后使用的內部實現。 Pro :公共可用的大量庫, 一些自.NET 3.5及更高版本以來可用的庫。 Con:正如你所提到的,有些可能有點矯枉過正。

  • 自定義算法 :創建自己的算法! 讓這些位搖一搖。 :它可以像你想要的那樣輕盈; 公共可用的破解工具幾乎無用。 這里有一個用於32位整數的簡單自定義加密協議的示例 ,可以輕松適應更大的內容。 Con :公共算法經過全面測試和驗證,確保您的實施可能達不到的安全級別; 重新發明輪子的理由很少。

當然,如果您需要額外的安全性(例如通過SSL連接的AES加密內容),您可以混合使用兩個或更多,但是由您決定。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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