【在Visual,FoxPro中使用低级文件函数加密表文件】excel函数公式大全讲解

  摘 要: 在软件系统设计中经常需要对某些数据文件进行加密操作,如对保存用户名和密码的表文件进行加密,通过低级文件函数改写文件表头部分的文件指针位置可以达到加密的效果。但是仅仅考虑到文件加密是不够的,所以在系统运行的过程中也要有解密的过程。
  关键词: Visual Foxpro 低级文件函数 加密表文件 解密
  
  在软件系统设计中经常需要对某些数据文件进行加密操作,例如在某个实例系统中设计一个登录界面,该登录界面需要输入用户名和密码,而用户名和密码保存在一个名为“管理员.dbf”的数据表文件中。程序会自动打开“管理员.dbf”表文件,根据输入的用户名和密码搜索表中是否有匹配的记录,若有则登录成功,否则无法进入系统。
  那么如果保存用户名和密码的“管理员.dbf”表文件没有被加密,在VFP中一般数据表都可以通过USE命令随时被打开,则该登录界面就失去了意义,所以应该对“管理员.dbf”表文件进行加密,表被加密以后,不能通过USE命令打开,保证了表的安全性。
  通过低级文件函数改写文件表头部分的文件指针位置可以达到加密的效果。但是仅仅考虑到文件加密是不够的,在登录过程中需要使用“管理员.dbf”保存的用户名和密码进行搜索匹配,如果“管理员.dbf”被加密,则会因为无法打开“管理员.dbf”而不能执行登录过程。所以在系统运行的过程中也要有解密的过程,当登录过程结束后还应及时将“管理员.dbf”再加密。
  以我开发的监理人员查询系统为例,该系统菜单有一项为“显示所有记录”菜单,功能是显示“监理.dbf”中所有的人员信息,显示信息之前会调用“系统登录”表单,只有输入正确的用户名和密码才能显示所有人员信息,事先将“管理员.dbf”通过低级文件函数改写文件表头部分的文件指针位置进行加密,代码如下:
  dbfname=getfile(?�dbf?�,?�选择需要加密的表?�)
  &&显示“打开”对话框,供用户选定一个文件并返回文件名。
  handle=fopen(dbfname,2)&&打开指定文件,返回文件句柄(控制号)。
  if handle=-1
   =messagebox(?�不能打开文件!?�)
   return
  endif
  kb=fread(handle,1)&&读取表头的第一个字节
  =fseek(handle,0)&&把文件指针移回第一个字节
  =fwrite(handle,chr(asc(kb)+2))&&用比原来的ASCII码高2的字符改写
  =fclose(handle)
  return
  因为“显示所有记录”表单是通过菜单方式调用的,所以在系统菜单文件“jl.mnx”中“显示所有记录”菜单的过程代码先将“管理员.dbf”解密,再调用“系统登录”表单。代码如下:
  public a
  a=3
  handle=fopen(?�管理员.dbf?�,2)
  if handle=-1
   =messagebox(?�不能打开文件!?�)
   return
  endif
  kb=fread(handle,1)&&读取表头的第一个字节
  =fseek(handle,0)&&把文件指针移回第一个字节
  =fwrite(handle,chr(asc(kb)-2))&&用比原来的ASCII码低2的字符改写,回到原来的位置
  =fclose(handle)
  close all
  do form系统登录
  此时“系统登录”表单运行,在“系统登录”表单的“确定”代码中打开已解密的“管理员.dbf”进行用户名和密码的搜索匹配过程,再关闭“管理员.dbf”执行加密过程。代码如下:
  close tables
  use 管理员
  cname=alltrim(thisform.text1.value) &&将text1中存放的用户名保存在cname中
  pw=alltrim(thisform.text2.value) &&将text2中存放的密码保存在pw中
  n=n+1
  set exact on
  go top
  locate for用户名=cname.and.密码=pw &&在数据表中查找匹配的用户名与密码
  if eof( )
   if n1
   messagebox(?�该用户名权限不够,请重新输入!?�,?�系统提示?�)
   return
   endcase
   thisform.visible=.f. &&隐藏该表单
   thisform.release &&关闭该表单
  endif
  use in管理员 &&关闭“管理员.dbf”表文件
  set exact off &&设置字符非精确比较
  *登录以后将“管理员.dbf”再加密
  *dbfname=getfile(?�dbf?�,?�选择需要加密的表?�)&&要加密的表不能是已经打开的表,即正在使用的表
  handle=fopen(?�管理员.dbf?�,2)&&参数2读写 缓冲
  if handle=-1
   =messagebox(?�不能打开文件!?�)
   return
  endif
  kb=fread(handle,1)&&读取表头的第一个字节
  ?handle
  =fseek(handle,0)&&把文件指针移回第一个字节
  =fwrite(handle,chr(asc(kb)+2))&&用比原来的ASCII码高2的字符改写
  =fclose(handle)
  return
  通过这样的加密、解密设计,无论系统是否执行“管理员.dbf”,都是安全的。如果使用过程中需要向“管理员.dbf”添加新的记录,可单独用解密程序对表解密,添加完记录后再加密。
  
  参考文献:
  [1]熊发涯.Visual FoxPro程序设计.中国铁道出版社,2005.
  [2]段兴.Visual FoxPro实用程序100例.人民邮电出版社,2002.
  [3]清源计算机工作室.Visual FoxPro开发宝典.机械工业出版社,1999.
本文为全文原貌 未安装PDF浏览器用户请先下载安装 原版全文

推荐访问:文件 低级 加密 函数