首页 > 开发 > 综合 > 正文

數据庫加密与解密技術之一 FOXPRO篇

2024-07-21 02:12:11
字体:
来源:转载
供稿:网友

最大的网站源码资源下载站,


     數据庫加密与解密技術之一 foxpro篇
作者:  ccbzzp

      在現實的應用中, 數据的安全是很重要的, 特別是象銀行等保密性非常重要的部門,
所以對數据的加密就特別重要, 筆者在長期的應用中總結出各种數据庫的加密和解密的
寫法, 希望對大家有幫助, 同時也和大家一起探討, 一起學習, 共同進步!

      foxpro為用戶提供一些低級的文件操作函數,利用這些低級的操作函數用戶可以實現對低級文件的操作,這些低級的函數主要有: fclose(),fcreate(),feof(),ferror(),fflush(),fgets(),fopen(),fputs(),fread(),fseek(),strtofile()等,這些函數的具体用法在此就不具体的描述,在下面的文章中會利用這些函數的.

1. 對數据進行加密

下面以修改一個用戶的密碼為例來說明:

程序chang_password的click()內容:

if vartype(m.id_man)<>'c' .or. vartype(m.id_psd)<>'c'
 =messagebox('妳還沒有註冊﹗不可以變更密碼﹐',0+48+0,'信息提示﹗')=6
 return
else
 select &father_table.
 locate for alltrim(id_man)==alltrim(m.id_man) ;
  .and.

alltrim(this.parent.encrypt_data.click(id_psd,m.id_man))==alltrim(m.id_psd) ;
  .and. !deleted()
 if found()
  if alltrim(m.new_password1)==alltrim(m.new_password2)
   replace &father_table..id_psd with

this.parent.encrypt_data.click(m.new_password1,m.id_man)
   =messagebox('密碼變更成功﹗',0+48+0,'信息提示﹗')
  else
   =messagebox('密碼沒有變更﹗兩次新密碼不一致﹗',0+48+0,'信息提示﹗

')
  endif
 else
  =messagebox('密碼沒有變更﹗舊密碼錯誤﹗',0+48+0,'信息提示﹗')
 endif
endif
this.parent.release()

 


程序encrypt_data的click()內容:

lparameters encrypt_password , encrypt_chr
encrypt_chr=alltrim(upper(encrypt_chr))
encrypt_chr1='340821960120581'
encrypt_long=len(encrypt_chr1)
encrypt_chr2=left(encrypt_chr+encrypt_chr+encrypt_chr+encrypt_chr,encrypt_long)
this.return_data=''
for i=1 to encrypt_long step 1
alteration_chr=chr(bitxor(asc(subst(encrypt_chr1,i,1)),asc(subst(encrypt_chr2,i,1))))
 

this.return_data=this.return_data+chr(bitxor(asc(subst(encrypt_password,i,1)),asc(alterati

on_chr)))
endfor
return this.return_data


2. 對數据庫文件進行加密
假如存在數据庫文件c:/users.dbf;

handle1=fopen("c:/users.dbf")
if handle1<0
   messagebox("沒有找到指定文件...",0+64,"信息提示!")
   return
endif
i=1
handle2=fcreate("c:/users.dbf")
do while .t.
   =fseek(handle1,i*32)
   retasc=fread(handle1,32)
   if asc(retasc)=13
      exit
   endif
   i=i+1
enddo
=fseek(handle1,0)
retstr=fread(handle,i*32)
=fwrite(handle2,retstr)
x=i*32
j=0
do while .not. feof(handle1)
   =fseek(handle1,x+j)
   retasc=fread(handle1,1)
   if asc(retasc)>253
      ch=chr(255-asc(retasc))
   else
      ch=chr(asc(retasc)+2)
   endif
   =fwrite(handle2,ch)
   j=j+1
enddo
messagebox("加密成功...",0+64,"信息提示!")
=fclose(handle1)
=fclose(handle2)
return

 

3. 對數据庫文件進行解密
假如存在數据庫文件c:/users.dbf;

handle1=fopen("c:/users.dbf")
if handle1<0
   messagebox("沒有找到指定文件...",0+64,"信息提示!")
   return
endif
handle2=fcreate("c:/users.dbf")
i=1
do while .t.
   =fseek(handle1,i*32)
   retasc=fread(handle1,32)
   if asc(retasc)=13
      exit
   endif
   i=i+1
enddo
=fseek(handle1,0)
retstr=fread(handle,i*32)
=fwrite(handle2,retstr)
x=i*32
j=0
do while .not. feof(handle1)
   =fseek(handle1,x+j)
   retasc=fread(handle1,1)
   if asc(retasc)<2
      ch=chr(255-asc(retasc))
   else
      ch=chr(asc(retasc)-2)
   endif
   =fwrite(handle2,ch)
   j=j+1
enddo
messagebox("解密成功...",0+64,"信息提示!")
=fclose(handle1)
=fclose(handle2)
return


以上如果要轉載請注明出處.

待續...
发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表