WEB开发网
开发学院数据库MSSQL Server Sql数据库MDF数据文件数据库恢复 阅读

Sql数据库MDF数据文件数据库恢复

 2007-11-11 05:54:04 来源:WEB开发网   
核心提示: FOX类编程语言易学好用,在我国有着非常庞大的编制和使用队伍,Sql数据库MDF数据文件数据库恢复(2),由于其十分普及,在用资源非常丰富,就很容易暴露,其加密的可靠性就有问题,加上其排序、检索速度之快,是VB和DELPHI在数据库处理上所不及的

  FOX类编程语言易学好用,在我国有着非常庞大的编制和使用队伍,由于其十分普及,在用资源非常丰富,加上其排序、检索速度之快,是VB和DELPHI在数据库处理上所不及的,因此,在未来很长一段时间里,是很难被其他语言所替代的。但其保密性差是也大家公认的。也许正是因为它的普及,只要稍为懂一点数据库知识的人,一打开数据表,其内容便一目了然,且可任意更改,其保密性和安全性可想而知。随着UNFOXpro.exe、Refox7.exe和Unfoxall等反编译软件的出现,你辛辛苦苦编的程序, 即使编译成EXE文件,一经反编译,则你煞费苦心设置的版权符、验证关、口令、密码 等都如同虚设。那么FOX类编程语言保密性差的弱点就真的没有办法避免吗?当然部是! 办法肯定有。下面就这个问题,谈谈我的看法和我所采取的一些措施:

  先谈有关数据表 (DBF)(下同)的加密问题。

  数据表的加解密常见的有三种方式:

  1、直接在磁盘上加解密,即在关闭数据表文件后,对已保存在磁盘上的数据表文 件进行加密,在每次蚩荼砦募埃仍诖排躺隙允荼斫饷埽缓笤俟〧OX将其打开,其优点是:加解密简单容易,一般程序员用FOXPOR提供的低级文件函数都能编 出加解密程序。缺点是:在 WINDOWS的多任务环境下,很容易取得解密后的数据,且一旦系统出错,还未来得及加密就重新启动系统,那保留在磁盘上的就是解密后的数据,稍微懂得一点WINDOWS系统特性的程序员,一般不会采用此方式。

  2、在内存中对数据表的字段进行加解密,这又可分两种:

  A、用ASC()函数把字符转换成ASCII码,再对ASCII码进行 + - * / 运算,然后再用CHR()函数把运算后的ASCII码转换成字符,进行加解密。但这种方法有个缺点,即当加或乘时,其值容易大于255(FFH)即大于ASCII码的最大值,无法用CHR( )再转换成字符,如果对运算后大于255的数据不加密,则解密时又会带来麻烦,即同是255, 哪个是加密后的255, 哪个是未加密的255呢?这也就是有人问为何汉字解密后会出现许多 同音汉字的原因。

  B、利用Vfp3.0以上版本提供的位操作函数bitxor()进行加解密,该加解密方法是C语言及汇编语言常用的加密方法,其原理是将一字节的8位二进制数与另一个二进 制数进行异或操作,如用6个以上密匙(口令)进行加密, 则在不知其密匙的情况下,是很难解密的。它还有一个优点是加解密用同一模块,即一次执行是加密,再次执行为解密。

  以下是其加解密例程:

  注:调用该过程时,需加密的数据表已打开,且为当前工作区

  Procedure jjmgc para Pass  &&Pass是密匙,假设Pass='wjgwkj'

  priv all

  mccd=len(Pass)       &&取Pass密匙长度

  Sjbzds=fcou()       &&取字段个数

  Dime Jmsz(Sjbzds)     &&根据字段个数建立一维数组

  Go top

  Scan

    Scat to Jmsz      &&读一条记录到数组

    For I=1 to Sjbzds

     If type("Jmsz(i)")="C"          &&该字段是字符型吗

      Zdcd=len(trim(Jmsz(i)))       &&取字段长度

      mc1=1

      For x=1 to Zdcd

        Jm1=asc(subs(Jmsz(I),x,1))     &&取字段中一个字节

        jm2=asc(subs(Pass,mc1,1))      &&取Pass中一个字节

        jmjg=chr(bitxor(jm1,jm2))      &&将JM1按JM2的值异或

        Jmsz(I)=stuf(Jmsz(I),x,1,jmjg)   &&进行加密替换

        mc1=iif(mc1>mccd,1,mc1+1)      &&判断MC1是否大于mCCD

      Endf

     Endi

    Endf

    Gath from Jmsz     &&将加解密的数据,写入当前记录

  Ends

  retu

  以上代码在WINDOWS 98 Microsoft Visual FoxPro 3.0以上版本通过。

  3.在内存中直接对整个数据表文件(.DBF)加解密,这也有两种方法:

  A.借助现成工具,犹如UCDOS SDK所提供的DBFKey()函数那样,与FOX无缝连接,不装入LoadSdk用USE是无法打开数据表的,其优点是显而易见的,但目前在WINDOWS 环境下还找不到这样的工具,而自己制作其难度大,一般程序员做不到。

  B.用Vfp提供的低级文件函数,配合Create Curso -SQL 和 Insert -SQL 命令可实现类似UCDOS SDK所达到的功能,其原理是:

  先用低级文件函数自定义一个文件头(或着叫文件格式,象BMP、DOC等都 有自己的文件格式),在文件头中可包含:文件头长度、字段名、字段类型、字段长度、每条记录长度、密匙(口令字)等,接着将您的记录按文件头规定的 格式加密后顺序写入文件中,由于文件格式是您自定义 的,所以一般是无法打开读取的。在使用时,用低级文件函数从您自定义的文件中先读取文件头的内容,读到字段名、字段类型、字段长度时,用Create Curso -SQL 将其到新建的数据表中,读取记录后先解密,再用Insert -SQL 到刚建的数据表中,然后就可正常使用了。结束使用需存盘时再按上述方法写入文件,该方法始终是在内存中进行的, 故即使系统出错,重新启动系统也无妨。

  用这种方法加解密确实是在Vfp状态下比较好的办法,但可能由于大家对文件格式及文件头的概念不理解。实际起来有一定难度。 我根据这个办法编制的可视类(vfpjmdbf.vcx)是专为VFP3.0以上版本制作的, 对此感兴起的朋友可到我的网站:

  《编程园地》 http://cfyn.yeah.net 去下载试用。

  也可直接点这下载:http://vfp.3322.net/vfpgj/vfpjmdbf.zip

  以上我们只谈了如何用FOX类编程语言加密数据表的问题,从中大家会看到,如果只对数据表加解密,而对执行加解密的程序代码不加密,用Unfoxall等反编译软 件将您的EXE文件反编译,那您的加解密方法及密匙(口令字),就很容易暴露,其加密的可靠性就有问题,那么如何才能加密和保护您的EXE程序呢?

  下次我们继续谈这个问题。

上一页  1 2 3 4 5 6 7  下一页

Tags:Sql 数据库 MDF

编辑录入:coldstar [复制链接] [打 印]
赞助商链接