一个项目,有一部分数据需要单独存放并且对数据进行加密,而且该部分数据
还需要供主程序进行调用,这部分数据的处理方式目前有两种方式选择:
1。用自己建立的文件存放数据
2。用access来存放数据问题:
1。如果用文件存放数据,格式如何定义(包含主从表结构),有那些地方需要注意呢?
  从文件中读取回的数据怎么能够以数据集的方式体现出来,除了采用临时表还有其他方法吗? 
【大家有没有做过,可以给我发一些相关的文档资料和Demo】
2。如果采用Access来存放数据的话,我知道可以通过修改Access的文件头数据进行加密,
但是这样处理有个问题:程序运行的时候,需要把文件头的数据还原才可以建立连接,
用户就可以在程序运行状态从后台打开access数据库。有没有一种好的方法对access进行加密呢?
3。还是采用access做数据库,有朋友提意见说是不对文件加密,对存入的数据进行加密,
我想知道,通过什么方式加密呢,在用query读取数据的时候如何把加密的数据还原,
并且以数据集的方式体现呢?如果进行查询或者筛选数据的时候又该如何处理呢?以上三个问题,知道300分有点少,不够可以加。
邮箱:[email protected]
QQ:  153993049(请注明DFW)
先谢谢大家!

解决方案 »

  1.   

    我以前做的是部分用数据库,部分用文件。数据库部分主要存放基础数据,用DES加密,解密,至于使用很简单,就象调用一个函数一样,但是加解密算法要写好,既要有难度,又要保证速度,关键在于密匙的设置,如果你要求不高,可以用死密匙,如果要求高,就用活的,我以前要求很高,不仅是活密匙,而且每行数据和每列数据加密可能密匙都不一样,为了应付加密,我们又专门弄了一个加密数据库来搞定他,呵呵,我想一般不需要那么复杂的东西。文件部分主要存放业务相关部分,首先加密文件头,有些重要的文件我们还做了一些加密点,就是读到那里还要校验。两种方式各有优缺点,文件快,但是不适合检索啊什么的,数据库慢些,但保险,而且可以检索,塞选,都没问题,当然检索的时候你输入的条件必须在你的代码里先加密,否则对不上,检索出来再解密就行了
      

  2.   

    >>1。用自己建立的文件存放数据
    有很多現在的自定義數據庫格式, 別人打開讀取, 比較難, 
    如:
    http://www.tinydb.com/
    http://borland.mblogger.cn/aiirii/posts/3559.aspx以上兩個都帶有加密功能!
      

  3.   

    >>2。如果采用Access来存放数据的话,我知道可以通过修改Access的文件头数据进行加密,
    這種沒什麼意思, 建議不用
    >>3。还是采用access做数据库,有朋友提意见说是不对文件加密,对存入的数据进行加密,
    在對應的字段的OnGetText 中解密數據,  OnSetText 中加密數據, 這樣的保存方法也很好!
    而且簡單!! 可考慮!個人認為 3 種比較正規的做法!!
    其實與數據庫驅動無關, 只要選擇合適的算法, 效果也不錯!
    當然, 第三種方法 , 你在讀字段的時候, 每個都要解密, 會影響性能, 緩慢顯示!
      

  4.   

    推荐一个控件TClientDataSet,可把数据存成二進制形式,当然也可自己再加密。procedure TForm1.Button1Click(Sender: TObject);
    var
      myDataSet:TClientDataSet;
    begin
      myDataSet := TClientDataSet.Create(application);//建立
      myDataSet.FieldDefs.Add('name',ftstring,10);
      myDataSet.FieldDefs.add('age',ftinteger);
      myDataSet.CreateDataSet;
      myDataSet.Active;
      myDataSet.AppendRecord(['張三',10]);
      myDataSet.AppendRecord(['李四',40]);  DataSource1.DataSet := myDataSet;    //再接TDBGrid控件、直接可看
      myDataSet.SaveToFile( ExtractFilePath (Application.ExeName) + 'ClientDataSet1.txt', dfBinary ); //二進制形式
    end;procedure TForm1.Button2Click(Sender: TObject);
    var
      myDataSet:TClientDataSet;
    begin
      myDataSet := TClientDataSet.Create(application); 
      myDataSet.LoadFromFile(ExtractFilePath (Application.ExeName) + 'ClientDataSet1.txt');   //読出
      myDataSet.Active;
      DataSource1.DataSet := myDataSet;
    end;
      

  5.   

    加密算法可以自定义,用access,query读取的时候,显示全部用添加的“计算字段“
      

  6.   

    计算字段的计算过程不是在查询时候就触发的,而是在显示的时候触发的,比如你的grid滚动条滚动时
      

  7.   

    >>全部用计算字段的话查询速度会不会受到影响呢?
    為什麼不考慮我提的
    第3種解決方法??? 比你用計算字段肯定快很多!!!
      

  8.   

    tinydb
    著名的MyBase就是用的它
      

  9.   

    aiirii(ari-爱的眼睛呵呵,我已经计划用哥们你的建议了,
    不过还是想看看大家还有什么好的思路,
    再次谢谢大家
      

  10.   

    >>全部用计算字段的话查询速度会不会受到影响呢?
    為什麼不考慮我提的
    第3種解決方法??? 比你用計算字段肯定快很多!!!
    ----------->应为看你的字太费 眼睛 ,,哈哈
      

  11.   

    sql server 2000里的自定义函数不知楼主用过没有,可以自定义一个加密过程一个解密过程,直接放进数据库里就行了。