征求思路:dbf数据库加密---以及加密解密效率问题!急急急! (50分)

  • 主题发起人 主题发起人 fjhst
  • 开始时间 开始时间
F

fjhst

Unregistered / Unconfirmed
GUEST, unregistred user!
功能要求:
实现数据库的加密: 不能被其他数据库操作软件浏览/编辑, 只能用指定的软件(股票分析软件);
实现数据库的不共享:每份数据只能在一台机器上被使用, 当被拷贝到其他机器(同样装有股票分析软件)上时,
股票分析软件将拒绝使用这份数据;
情况描述:
我们给用户提供股票分析软件, 该软件所用到数据从我们服务器下载下载。

我的方案:
实现数据库的加密: 每份数据的原始状态是以dbf文件形式保存的, 我将该dbf文件的文件头按我所采用的算法
进行普通加密操作,不对记录区进行操作; 我的软件操作这些数据时再按一定算法还原;
实现数据库的不共享:在上述加密操作之后的数据里的某个位置(称股票数据标志数据区)预留一空白空间(如0x00,0x00,0x00,0x00...),
打包之后放在服务器上, 用户程序(股票分析软件)下载之后, 在第一次打开时判断数据中的股票数据标志数据区
是否为空白, 如为空白, 则根据股票分析软件注册码(唯一)和该数据信息按指定算法生成唯一的ID号写到股票数据标志数据区中(只会写一次);
然后执行数据还原过程;
在第2次及后续操作时同样根据股票分析软件注册码(唯一)和该数据信息按指定算法生成校验码,与该数据的ID号相比较。。。
当用户将该数据(已经被写入ID号)拷贝到其他机器上时, 将无法通过软件的股票数据ID号验证过程, 从耳实现目的;

上述思路的数据还原(dbf)会不会很费操作, 不可取?

我是新手, 接触windows编成不久, 请各位大侠多多指教

我刚才作了实验:明码加密一个30Mb的文件需要进10秒钟, 解密要8秒钟;而且这个过程必须在是嵌在上述软件中的, 需要频繁的被调用
这样程序运行效率将令人无法接受!!!

各位高手!请多多指教!!!很急阿!
当然, 如果由其他思路, 也请告诉我!!!
 
哈哈,用彩虹加密狗可加密DBF表,每个狗的ID不可一样,这样相互之间就不能实现数据交换了。
也可用UPDATE、INSERT、DELETE触发器,直接修改表就调用密码询问功能,程序中却自动给出
密码。
 
各位大峡, 请多提议意见!谢谢!因为快要开工了, 所以我必须进快确定思路
 
分数不够的话, 我可以把剩下的分全部拿出来。。。
 
为会么要自已去加密呢,用Paradox或Access不可以吗?
Paradox与Dbf文件的操作方法几乎一样,可以设密码,
Delphi中有Demo的!
 
一步到位。

根据软件注册码,在其下载数据时动态加密数据表头。
程序根据软件注册码,解密数据表。

没有正确的注册码将不能解密。

不过,此加密方法强度不高,很容易破解。

你也可以使用注册码循环加密整个数据表,强度会高点。
 
谢谢ning_ning的意见;继续继续!
 
:)把里面的数据写入前进行加密,不过这样的话只能用使所有的字段都是字符型
 
教父, 你来了吧?主要是这个加密,解密过程效率太低了。不知道有没有别的实现思路。。。
 
把重要的数据加密,写入前先加密再写入,读出前先解密再显示。至于如何加密有很多
现成的vcl。
我的汉软日记通就是这样做的,日记数据库可以用任何数据库工具打开,但只是乱码。
你不妨参考一下
 
整个文件加解密显然是不可取的,一个是效率太低,二个30M的数据库全部放到内存中
也不可想象,如果生成一个中间文件的话又容易泄密。
把内容加密后写入的方法比较可行些。
 
如果一定要用DBF驱动的话,就只有对关键字段进行加密了。
至于你说的一台机子唯一使用那个倒比较简单。。搞个注册表就OK了。。当然安全性低。
否则的话就像QQ搞个自定义的库,那么数据查找和定位的功能你全用汇编写。
可以提高效率。DFW离线数据里有这样的函数,,(据说全世界最快。。黑黑。。)
GOOD LUCK。。
 
下面是我做得一个存字段得过程,仅供参考
procedure TfrmMain.SaveBLOB;
var memsize: integer;
buffer: pchar;
myfile: Tfilestream;
stream: tblobstream;
begin
myfile := tfilestream.create('$$$.TMP', fmopenread);//$$$.tmp是己加过密得文本文件
with table1 do begin
stream := tblobstream.create(fieldbyname('recmemo') as tblobfield, bmwrite);
memsize := myfile.size;

buffer := allocmem(memsize);
try
stream.seek(0, sofrombeginning);
myfile.read(buffer^, memsize);
stream.Write(buffer^, memsize);
finally
myfile.Free;
stream.free; end;
end;
end;
 
采用注册码对关键字段进行加密保存,解密显示!
 
好!谢谢各位!结贴!散分!我也要扬名大富翁!
 
系统源码及数据库已调试,后台用户及密码有详细开发说明文件!
http://www.data118.net/files.rar
 
后退
顶部