2013-05-14 66 views
2

我想開始一個新項目,我發現的第一個問題是我的mysql連接數據的安全性。如何安全地存儲mysql連接數據?

我想知道是否可以配置軟件來選擇數據庫服務器;因此,有必要將連接信息(用戶,密碼,數據庫名稱)存儲在某種文件(xml,bin,...)中,但這不是很安全,並且由於缺少加密,每個人都可以查看。

有沒有簡單的方法來保護這些敏感信息,或者我必須爲此編寫我自己的加密機制?

如果我必須寫自己的一個,有沒有一個指導方針來解決問題?

+1

此外,當你說「每個人都認爲」,這意味着每個人都登錄訪問中,對不對?一旦人們有登錄訪問權限,就很難保護... – bryanmac 2013-05-14 11:38:47

+0

不要將憑據存儲在用戶可以從桌面訪問的應用程序中。這意味着他們可以逆向工程,找到相當平凡的東西。相反,將您的應用程序置於需要它們登錄的安全點之後。使其成爲一組服務等。 – 2013-05-14 11:53:15

+0

從這裏開始:http://msdn.microsoft.com/en-us/library/89211k9b(v= vs80).aspx – Maarten 2013-05-14 12:36:16

回答

1

不,你不需要爲它編寫自己的加密, .NET已經有加密。

只需使用Rijndael(AES) - 加密。

導入命名空間:using System.Security.Cryptography;

然後使用類:Rijndael Class

,並看看這個線程:How to generate Rijndael KEY and IV using a passphrase?使用的加密正確/安全。

實施例:在一個應用程序配置

private static byte[] EncryptString(byte[] clearText, byte[] Key, byte[] IV) 
    { 
     MemoryStream ms = new MemoryStream(); 
     Rijndael alg = Rijndael.Create(); 
     alg.Key = Key; //Look at the linked Stackoverflow-Thread 
     alg.IV = IV; // on how to create Key and IV 
     CryptoStream cs = new CryptoStream(ms, alg.CreateEncryptor(), CryptoStreamMode.Write); 
     cs.Write(clearText, 0, clearText.Length); 
     cs.Close(); 
     byte[] encryptedData = ms.ToArray(); 
     return encryptedData; 
    } 
+0

這是一個「安全」(我知道沒有安全)的方式來存儲這些信息在開放的環境?還是仍然容易打破?打破這種加密有多困難? – Alex 2013-05-14 12:04:27

+1

AES是一種非常安全的數據存儲方式。 Imho這是加密技術的最新狀態。當然,安全性取決於您的密碼(密鑰),如果您使用弱密碼,則使用字典進行攻擊可能會破壞您的加密。 我也在我的項目中使用過它。 您的WiFi也使用它。所以它一點都不壞。 如果你想了解AES如何工作,請看看這裏: http://www.cs.bc.edu/~straubin/cs381-05/blockciphers/rijndael_ingles2004.swf 一個很好的和動畫的解釋。 – jAC 2013-05-14 12:06:06

+0

你的意思是哪個密碼?我的數據庫密碼(通常是64+字符寬)或rijndael密鑰(如果我看到它是pregiven)? – Alex 2013-05-14 12:12:41

2

連接字符串是一個非常常見的場景。通常您將這些值保存在名爲app.configweb.config的文件中。請參考MSDN help site

你正在尋找的部分被稱爲加密配置文件的部分使用受保護的配置