我通过aspnet_regiis -pef ...
把我的appconfig中的connectionStrings加密成功了,
可是Settings.settings文件里却是明文的数据库连接字符串。就这样我把我的程序编译了一下,然后用Reflector进行了反编译,发现我的Settings.settings里的明文内容一览无余,我的天,那加密app.config还有个啥作用呢?请高人指点一下,既然大家都希望加密app.config文件,我想一定是有作用的。
是不是我理解上存在问题。我的工程里有个强类型的DataSet,里面使用到的连接字符串都是从Settings.settings中读取到的。
实在有点困惑了.....

解决方案 »

  1.   

    我猜想aspnet_regiis提供的这个功能是被设计出来用于web应用程序的,如果是Windows应用程序,需要自己处理加密和解密。而且这个功能的主要用户不是开发人员,而是release manager和system maintenance staff,开发的时候不用加密web.config,而是在部署的时候由release manager他们在生产服务器上做,这种加密方式应该使用了本计.NET Framework的某个随机秘钥或者是计算机证书,可能就是用了machineKey。
      

  2.   

    还是自己想办法解决了问题:(虽然不知道算不算是个好办法,至少达到目的了...)
    1.把app.config文件改名为web.config
    2.用apsnet_regiis 把web.config加密〔把connectionstring和appsetting两个区段都加了密〕
    3.把iDataSet.designer.cs里原本使用OPAccessDB.Properties.Settings.Default.pubsConnectionString作为连接字符串的地方都用System.Configuration.ConfigurationManager.ConnectionStrings["OPAccessDB.Properties.Settings.pubsConnectionString"].ConnectionString做了替换;
    4.然后删除了工程中的Settings.settings文件;
    5.编译项目后,生成的.exe文件用Reflector进行了反编译,发现反编译的内容里已经找不到明文的数据库连接字符串了。这样应该是达到隐藏和加密数据库连接字符串的目的了;问题:
    一旦作了替换,iDataSet的可视化编辑中,就不能对TableAdapter做配置了,因为会提示"配置失败"的错误提示;不知道有没有高手想到更好的解决办法,还望能继续回帖,便于大家参考,谢谢了!
      

  3.   

    说明一下,上帖中下面的这条语句:
    System.Configuration.ConfigurationManager.ConnectionStrings["OPAccessDB.Properties.Settings.pubsConnectionString"].ConnectionString
    其中:
    "OPAccessDB.Properties.Settings.pubsConnectionString"是app.config文件中连接字符串的name;
    文件部分如下:
    ... ...
    <connectionStrings>
            <add name="OPAccessDB.Properties.Settings.pubsConnectionString"
                connectionString="Data Source=192.168.0.200;Initial Catalog=UserInfoManager;Persist Security Info=True;User ID=sa;Password=147258369"
                providerName="System.Data.SqlClient" />
    </connectionStrings>
    ... ...
      

  4.   

    你可以看下PETSHOP4,那个BAT文件,还有相应你说的那种情况,如果人家也能看到明文,也就无所谓了。
      

  5.   

    我的做法应该是彻底加密了明文的数据库连接字符串,因为工程里原本就两处有数据库连接字符串:
    一处是app.config
    一处是Settings.settings
    现在app.config通过aspnet_iis的方法加密了,而且在工程中也移出了Settings.settings文件。
    即便反编译后,也应该是找不到数据库连接字符串的了,我的想法应该是对的吧!至于程序被反编译,我却无所谓的了。
    我的目的就是在程序中别存在明文的数据库连接字符串即可。
      

  6.   

    不需要这么做吧.
    还是保留Settings.settings.
    打到Settings.settings,双击打开Setting的窗口,(或在项目属性的Setting节).
    如果你的config文件的设置和之前不一样,它会提示是不是用新的值更新settings的值,你选yes就可以了.
      

  7.   

    楼上说的我明白,Settings.settings固然是好用,可是安全性如何考虑呢?
    不信你可以在Settings.settings里创建数据库连接字符串
    然后app.config文件里就会有对应的设置,你通过aspnet_regiis -pef ...(网上介绍的很多)方式加密app.config文件
    然后编译项目最后你用Reflector反编译你的exe文件,打开反编译项目的Resources节点里,便可清晰的看到明文的数据库连接字符串;我之所以那么做,就是希望数据库连接字符串得到加密;不过办法有点拙,但也没有找到两全的办法,所以发此帖,也希望能有高人给指点一下;谢谢各位回帖者,期待高人光顾....
      

  8.   

    你就没有明白我的意思.你app.config里的数据库连接字符串是加了密的,那是不是和Settings.settings里的值是不是不一样了?"打到Settings.settings,双击打开Setting的窗口,(或在项目属性的Setting节). 
    如果你的config文件的设置和之前不一样,它会提示是不是用新的值更新settings的值,你选yes就可以了."这样,Settings.settings里就是和app.config是一样的了.
      

  9.   

    楼上的 你回去试一试再回帖吧app.config加密后,"打到Settings.settings,双击打开Setting的窗口,(或在项目属性的Setting节)."
    是不会有任何提示的,而且里面的数据库连接字符串依旧是明文的。不知道你测试后结果会如何,静候佳音... ;-)