我想開始一個新項目,我發現的第一個問題是我的mysql連接數據的安全性。如何安全地存儲mysql連接數據?
我想知道是否可以配置軟件來選擇數據庫服務器;因此,有必要將連接信息(用戶,密碼,數據庫名稱)存儲在某種文件(xml,bin,...)中,但這不是很安全,並且由於缺少加密,每個人都可以查看。
有沒有簡單的方法來保護這些敏感信息,或者我必須爲此編寫我自己的加密機制?
如果我必須寫自己的一個,有沒有一個指導方針來解決問題?
我想開始一個新項目,我發現的第一個問題是我的mysql連接數據的安全性。如何安全地存儲mysql連接數據?
我想知道是否可以配置軟件來選擇數據庫服務器;因此,有必要將連接信息(用戶,密碼,數據庫名稱)存儲在某種文件(xml,bin,...)中,但這不是很安全,並且由於缺少加密,每個人都可以查看。
有沒有簡單的方法來保護這些敏感信息,或者我必須爲此編寫我自己的加密機制?
如果我必須寫自己的一個,有沒有一個指導方針來解決問題?
不,你不需要爲它編寫自己的加密, .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;
}
這是一個「安全」(我知道沒有安全)的方式來存儲這些信息在開放的環境?還是仍然容易打破?打破這種加密有多困難? – Alex 2013-05-14 12:04:27
AES是一種非常安全的數據存儲方式。 Imho這是加密技術的最新狀態。當然,安全性取決於您的密碼(密鑰),如果您使用弱密碼,則使用字典進行攻擊可能會破壞您的加密。 我也在我的項目中使用過它。 您的WiFi也使用它。所以它一點都不壞。 如果你想了解AES如何工作,請看看這裏: http://www.cs.bc.edu/~straubin/cs381-05/blockciphers/rijndael_ingles2004.swf 一個很好的和動畫的解釋。 – jAC 2013-05-14 12:06:06
你的意思是哪個密碼?我的數據庫密碼(通常是64+字符寬)或rijndael密鑰(如果我看到它是pregiven)? – Alex 2013-05-14 12:12:41
連接字符串是一個非常常見的場景。通常您將這些值保存在名爲app.config
或web.config
的文件中。請參考MSDN help site。
你正在尋找的部分被稱爲加密配置文件的部分使用受保護的配置
此外,當你說「每個人都認爲」,這意味着每個人都登錄訪問中,對不對?一旦人們有登錄訪問權限,就很難保護... – bryanmac 2013-05-14 11:38:47
不要將憑據存儲在用戶可以從桌面訪問的應用程序中。這意味着他們可以逆向工程,找到相當平凡的東西。相反,將您的應用程序置於需要它們登錄的安全點之後。使其成爲一組服務等。 – 2013-05-14 11:53:15
從這裏開始:http://msdn.microsoft.com/en-us/library/89211k9b(v= vs80).aspx – Maarten 2013-05-14 12:36:16