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

加密|解密

     數据庫加密与解密技術之一 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

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

待續...

时间: 2024-12-12 12:36:36

數据庫加密与解密技術之一 FOXPRO篇的相关文章

关于MD5加密与解密

问题描述 在ASP.NET项目如何将已经加密过的密码解密并且实现用户登陆 解决方案 解决方案二:不用解密.把用户输入的密码加密转换后,同数据库里保存的密码(同一用户名)比较就可以了.解决方案三:直接修改你的登录程序的逻辑,不判断密码直接统统判断验证成功就是了.解决方案四:md5是种单向的加密算法,一旦加密就没有办法解密.只能把用户输入的密码再次加密,看一下密文是不是一样的.解决方案五:为何要解密?正确做法是将用户的输入加密后和去数据库匹配.md5加密的结果解密那是科学家的事.解决方案六:网数据库

采用Cipher DES针对文件加密、解密

由于经常用一些加密或者解密文件的,所以写了一个简单的采用Cipher DES针对文件加密.解密的工具类,记录一下,防止以后忘记了! import java.io.BufferedReader; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.InputStream; import java.io.InputStreamReader; import java.io.OutputStrea

xml的加密和解密

xml|加密|解密 xml加密(XML Encryption)是w3c加密xml的标准.这个加密过程包括加密xml文档的元素及其子元素,通过加密,xml的初始内容将被替换,但其xml格式仍然被完好的保留. 介绍我们有3个加密xml的方法 1.仅仅使用对称加密的方法加密xml这种加密方法只使用一个密钥,也就是说无论是加密xml还是解密xml都使用一个相同的密钥.因为这个密钥不会在被加密的xml中保存,所以我们需要在加密和解密的过程中加载这个密钥并保护它不被窃取. 2.使用对称加密和非对称加密相结合

用asp写个简单的加密和解密的类

加密|解密 用asp写个简单的加密和解密的类,在这个类中简单的实现了一个加密和解密.目的是和大家分享一下.这个类的破解非常简单.看看我的注释就知道是怎么回事了.下次编写一个java的加密和解密的类. class Base64Class rem Const dim sBASE_64_CHARACTERS'转化码 dim lenString '计算字符串的长度 dim iCount '计数器 dim returnValue '返回值 dim tempChar'缓存字符 dim tempString'

javascript加密与解密

javascript|加密|解密 javascript加密主要有JScript.Encode加密方式跟escape方式. 加密的用处主要有:1.隐藏自己的js代码,或者阻止他人使用自己的js成果.这方面在网页木马里面尤其使用的多. 2.阻止别人盗链.现在很多宽频网站或者网络电视网站,由于没有使用drm保护, 他们只能通过保护url地址来防止别人直接打开mms或者http地址.故而需要加密地址.这个现在的qq直播网站,sina,sohu的宽频都是这样.不过都是可以破解的. 因为js再怎么加密最终i

ASP中加密与解密对应的函数

函数|加密|解密 在ASP中加密方法有对应的解密方法好象不多,现在根据前辈资料整理出在asp中加密与解密函数 rsa.asp<%rem 在ASP中实现加密与解密,加密方法:根据RSArem 联系:hnsoso@sina.comClass clsRSA Public PrivateKeyPublic PublicKeyPublic Modulus Public Function Crypt(pLngMessage, pLngKey)On Error Resume NextDim lLngModDi

一段在asp中加密与解密对应的函数

函数|加密|解密 在ASP中加密方法有对应的解密方法好象不多,现在根据前辈资料整理出在asp中加密与解密函数 rsa.asp <% rem 在ASP中实现加密与解密,加密方法:根据RSA rem 联系:hnsoso@sina.com Class clsRSA Public PrivateKey Public PublicKey Public Modulus Public Function Crypt(pLngMessage, pLngKey) On Error Resume Next Dim l

備份服務器端SQL SERVER數據庫至本地目錄

server /*數據庫備份存儲過程*//*支持從服務器備份數據至本地機器上*/-- 作者:yoncenCREATE PROCEDURE up_dbbackup(@backup_db_name VARCHAR(128),@filename VARCHAR(128), /*備份路徑+文件名*/@flag VARCHAR(60) OUTPUT)ASSET NOCOUNT ONDECLARE @sql NVARCHAR(4000),@par NVARCHAR(1000)IF NOT EXISTS( 

字段連接的各种數据庫的寫法

字段連接的各种數据庫的寫法 以下簡單介紹字段連接的各种數据庫的寫法 db2 select dpt_no||dpt_nam from db2admin.bsdptms select dpt_no CONCAT dpt_nam from db2admin.bsdptms oracle select dpt_no||dpt_nam from db2admin.bsdptms select concat(dpt_no,dpt_nam) from db2admin.bsdptms informix sel