2013-08-27 65 views
1

我有一个应用程序,我应该连接到SQL Server。它受密码保护。所以当我第一次启动程序时,我创建了一个动态连接字符串并将其保存在app.config中。接下来我可以使用创建的connectionString。我GOOGLE了,并决定做以下事情:加密app.config中的connectionString并将密码保存在我的代码中。当我想下次连接数据库时,我将解密connectionString,添加userId和密码,并将新的connectionString连接到服务器。在关闭程序之前,我将从connectionString中删除userId和密码并重新加密。但我有一些问题:如何保护connectionString

1)这是一个很好的解决方案吗?

2)当我开始计划的第一次,我需要建立连接字符串,所以在某个地方的代码应该是用户名和密码。如何处理这个问题?

+0

这难道不是最好创建一个设置? –

+0

@Ravshanjon你可以向我解释一下吗,因为我是新来的安全问题 – Sasha

+0

你知道关于Settings.settings的一些事吗?如果你不知道请看这个http://stackoverflow.com/questions/17379526/c-sharp-how-to-add-string-to-resources –

回答

0

创建数据库用户名,DBPASSWORD和其他数据库条目在App.config键。对于DBPassword,使用在代码中硬编码的主密钥对其进行加密(可能对称)。这通常是足够的。还有其他一些方法,例如使用密钥存储来存储密钥。

如果你不希望每次构建康涅狄格州字符串,创建应用程序配置条目保持整个连接字符串加密,并与主密钥(我在这里看到没有价值)整个事情。

+0

你能提供一个例子吗? – Sasha

+0

1。编写测试程序以生成主密钥:http://msdn.microsoft.com/en-us/library/system.security.cryptography.rijndaelmanaged(v=VS.100).aspx#Y2262 2.使用此键入测试程序来加密DBPassword。 3.将此加密DBPassword写入app.config 4.将您在步骤1中生成的密钥和硬编码复制到应用程序源代码中。 5.当应用程序运行并且您需要生成conn字符串时,使用硬编码密钥(步骤4)解密在app.config中找到的加密DBPassword(步骤3)。 – Vivek

+0

我现在就试试吧...... – Sasha

0

之前关闭程序时,我会从删除的connectionString用户ID和密码,并再次对其进行加密

这并不是一个很好的解决方案。在程序终止时,您的数据应始终加密或至少丢失。如果您的用户使用任务管理器(或简单地崩溃)杀死您的程序,并且您依赖于您的程序将在退出时加密数据这一事实,则您的数据将保持未加密状态。

你可以在加密你的用户名和密码的时候,所有的连接字符串。然后,任何时候你想连接,解密它,把它传递给所需的功能,并摆脱它。切勿以未加密的方式坚持它。

+0

并与用户名和密码该怎么办,这是硬编码? – Sasha

+0

如果它们是硬编码的,为什么不从一开始就把整个连接字符串放入配置中?当然加密。 – nvoigt

+0

我不知道SQL服务器的位置,所以当我第一次运行程序时,客户选择服务器,并使用这个服务器名称,我创建connectionString – Sasha

1

据我所知,你动态地创建连接字符串。所以你也可以从代码加密这部分。默认情况下,加密算法会使用你的机器密钥来加密的部分,这里是链接怎么办呢http://www.dotnetcurry.com/ShowArticle.aspx?ID=185

+0

我用这个方法。但def关注“机器键”部分。什么是解决方法是编写一个“后门”加密器(按钮?)....将未加密的信息放置在配置文件中,然后运行“后门”加密代码....... – granadaCoder