2013-09-25 93 views
1

我正在用C#和.NET Framework 4.0開發WCF Web服務。我還在開發一個iOS和Android客戶端來連接它。用C#加密字符串並在iOS和Android上解密

在服務器端,我必須生成一個偶然的密碼,加密它,然後將其發送回iOS客戶端或Android客戶端。

我不知道如何使用.NET Framework加密字符串。在互聯網上搜索,我發現有算法可以做到這一點:MD5,RSA等(我不確定是否瞭解如何加密字符串,因爲我還沒有進行字符串加密)。

如果我使用MD5加密密碼,那麼在iOS和Android上解密它需要做些什麼?

你推薦我什麼?

+0

使用SSL加密連接。遠遠超過你自己設計的任何東西。 – CodesInChaos

+0

@CodesInChaos我想存儲在數據庫以及iOS和Android設備上加密的密碼。 – VansFannel

+0

對於傳輸,發送SSL中的密碼(不要忘記驗證服務器證書)。對於數據庫,使用專門的密碼哈希(PBKDF2,bcrypt或scrypt)。有關詳細信息,請參見[如何安全地哈希密碼?](http://security.stackexchange.com/questions/211/how-to-securely-hash-passwords)。在.net中,最簡單的散列是'Rfc2898DeriveBytes',它具有〜20000次迭代,這是PBKDF2-HMAC-SHA-1的一個實現。 – CodesInChaos

回答

-1

創建關鍵字的MD5哈希很容易在.NET:

MD5 hashKey = new MD5CryptoServiceProvider(); 
var hashedKey = hashKey.ComputeHash(ASCIIEncoding.ASCII.GetBytes("password")); 

注:哈希關鍵是字節數組,你可以從它建立一個字符串或做進一步的encrpytion(FE更改爲數字,將其轉換爲十六進制...)。您需要using System.Security.Cryptography;

在Ios/Android上,您必須執行相同的操作,使用MD5algorithm(總是相同,這就是爲什麼它可以工作)對字符串進行加密,然後比較兩個結果。

+0

但至少有四種不同的方式是一個壞主意。 1)速度很快。您需要使用scrypt,bcrypt或PBKDF2等慢迭代方案。 2)它沒有鹽3)它靜靜地破壞了非ASCII密碼4)雖然在這種情況下MD5沒有被破壞,但仍然最好使用像SHA-2這樣的更強大的散列(作爲PBKDF2中的彙集塊) – CodesInChaos

+0

@CodesInChaos請給我們一個更好的方法。 – VansFannel

+0

@CodesInChaos我知道...我剛剛發佈了一個示例如何使用md5(這是基本問題)。當然,這不可能是完整的解決方案。鹽等,但我同意你在第3點......沒想過。 – BudBrot

0

在.Net中加密字符串很容易。您可以使用內置的System.Security.Cryptography.MD5。

這裏是一個鏈接:http://msdn.microsoft.com/en-us/library/system.security.cryptography.md5.aspx

這是非常相似的關於語言之間的加密/解密你一個問題.. mfanto有一個很好的答案。

Best practices for passing encrypted data between different programming languages

+0

感謝您的回答,但我無法找到那個非常類似的問題。 – VansFannel

+0

@VansFannel對不起,忘了發佈鏈接:( – Botonomous

+0

加密是在.net中很難。它只提供低級功能。將這些組合成一個安全的方案很困難。在這種情況下,MD5顯然是一個不錯的選擇。 – CodesInChaos

0

問題是您的加密必須嚴重嗎? MD5不是一件嚴肅的事情。至於RSA,你應該考慮到這是一種不尋常的加密方法,它使用一對公鑰和私鑰。根據你的目標,可以說出RSA是否足夠適合你。當然,如果你認真開發一些東西,絕不要使用公共圖書館進行加密(包括MS)。