我写的一个程序,程序内要对数据库操作,因此有一些SQL语句,编译后以二进制方式打开exe文件,可以看到一些SQL语句,这样就会对数据库结构泄密。我想解决这个问题的一个方法是:先用其他加密程序对SQL字符串进行加密,将加密后的字符串放在程序中,程序运行的时候再动态解密,再执行SQL语句。不知各位用什么方法来解决这个问题?

解决方案 »

  1.   

    可以不在客户端直接使用网络数据库的方法直接SQL操作数据库,而是在服务器启服务,该服务完成你的特定操作数据库操作和完成交互,可以使用SSL Socket来完成这客户到服务器之间的通信交互操作,
    这样一般有很多的好处
    1.当数据库服务器变了不需要修改客户端用程序,所有的用户也不需要从新下载或更新程序
    2.如果数据库中的表结构变化,只要不处及到你的协议接口的变化,用户也不需要变化.
    3.比较容易实现数据库的分布式等其实你就是应当提供一个系统来完成客户端程序的对外需求
      

  2.   

    你自己定义一个简单的“加密协议”,存放的时候按照这个协议“打乱”SQL,读取的时候在“解密”出来,这个最简单,但是安全性也不高。
      

  3.   

    加壳了人家也可以脱壳啊!我觉得把sql语句用二进制放到资源里面,然后动态还原
      

  4.   

    真难!1:数据库的管理员可以看到一切表结构,如果想对原理保密,不容易办到。
    2:程序种可以加密,加壳都可以,但是你的Sql语句会经过ODBC,可以被驱动程序Trace,看得更清楚。(呵呵,是完整的,比Exe文件中的要完整)
    3:如果不通过ODBC,你的Sql也会在网路上通过,用包截取工具也容易看到通信内容。
    4:存储过程可以加密,但是也有解密程序可以找到,可以还原。
    5:如果用扩展存储过程,把SQL加密存储在DLL中,布置在服务器端,那么文件和网络上就没有具体Sql的明文了。但是要知道DLL的端口是可以欺骗的。终上所述,一个字“难”!
    如果你的软件有价值的话,建议做好营销,卖得快,早一点把钱赚到满意,让人家看去好了,你又可以出新的了。
      

  5.   

    加壳阿找个ASPack PEcompact什么的压缩一下就可以了
      

  6.   

    >加壳了人家也可以脱壳啊!我觉得把sql语句用二进制放到资源里面,然后动态还原
    没用,sql语句最终总是会以明文的形式存在于内存中。你再怎么动态都没用最简单的办法就是用一个没有现成脱壳工具的加壳软件加壳,这样就可以挡住99%的菜鸟了想要100%的保护是不可能的,除非你自己做个CPU,写个操作系统和编译器
      

  7.   

    谢谢大家的建议,我想做的是一个共享软件,不需要C/S的结构,用ADO连接ACCESS数据库。
    我知道想要完全防止解密是不可能的,只要有汇编大师肯下功夫,什么程序都是可以解密的。要这么做是为了用有限的时间、方法获得最大的效率,能给解密者创造最大的难度。
      

  8.   

    http://community.csdn.net/Expert/topic/3696/3696617.xml?temp=.1594049
    印尼亚齐省劫掠现象严重华人成为抢劫目标http://news.sina.com.cn/c/2005-01-03/18414704205s.shtml
    港报呼吁印尼当局制止歹徒趁乱抢掠华人恶行
      

  9.   

    经过考虑,我将按下面的过程来保护SQL语句。
    1、将程序中SQL整理出来,每一条语句用一个文件保存;
    2、用已有的加密算法(未公开的算法)对每个文件加密成另一个文件;
    3、将每个加密的文件作为资源添加到VC的资源中,作为SQL资源;
    4、程序运行中先装载SQL资源,然后解密,并执行。