2013-05-14 64 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

你正在寻找的部分被称为加密配置文件的部分使用受保护的配置