回 帖 发 新 帖 刷新版面

主题:[讨论]如何異化數據表?

大家都知道.DBF的數據格式,只要用戶裝上VFP,就可以直接修改表中數據,偶然從一本書上看到可以把.DBF的數據異化成"火星文",其方式是:用指定的軟件登錄時先將數據表同化成"地球文",退出軟件時,再將數據表異化成"火星文".也就是說,其數據必須要經過指定的軟件轉異,才能夠操作.不知哪位朋友可以給出一個詳細的代碼出來?

回复列表 (共4个回复)

沙发

这类转换本来就是建在数据库一一对应上面,从一个所谓的“地球文”转到所谓的“火星文”

还是就是通过ANSI 数值加密和解密的一个过程!
下面就是一个加密和解密的函数,希望对你有用!

*****************************
*此code函数为数据加密,加密后的密码将成不可识
******************************
Function Code
Parameter PASS_STR, SEED
Private PASS_STR, SEED, STR_LEN, RVALUE, I, PLACE
If Parameters()=1
    SEED = 15
Endif
If SEED>20
    SEED = 15
Endif
Do Case
Case Type('pass_str')='C'
    PASS_STR = Trim(PASS_STR)
Case Type('pass_str')='N'
    PASS_STR = Str(PASS_STR)
Otherwise
    = Messagebox('The parameter passed to the function '+Chr(13)+'CODE is not acceptable.  Function '+Chr(13)+"will return '***'.", 48, "岿粇")
    Return ('***')
Endcase
STR_LEN = Len(Trim(PASS_STR))
SEED = SEED+89
RVALUE = ''
For I = 1 To STR_LEN
    PLACE = Asc(Substr(PASS_STR, I, 1))+SEED-I
    RVALUE = RVALUE+Chr(PLACE)
Endfor
Return (RVALUE)
Endfunc
******code结束****************

******************************
*此recode函数为code函数的反运算,用于解密
*******************************
Function recode
Parameter PASS_STR, SEED
Private PASS_STR, SEED, STR_LEN, RVALUE, I, PLACE
If Parameters()=1
    SEED = 15
Endif
If SEED>20
    SEED = 15
Endif
STR_LEN = Len(Trim(PASS_STR))
SEED = SEED+89
RVALUE = ''
For I = 1 To STR_LEN
    PLACE = Asc(Substr(PASS_STR, I, 1))-SEED+I
    If PLACE<32 .Or. PLACE>128
        = Messagebox('You are trying to use DECODE on a string '+Chr(13)+'that was not coded properly.  The function '+Chr(13)+'will return "******"', 48, "岿粇")
        Return ('******')
    Else
        RVALUE = RVALUE+Chr(PLACE)
    Endif
Endfor
Return (RVALUE)
Endfunc
******recode结束****************

板凳

謝謝你的回復,但寫的和書上的一樣,僅從VFP的角度上看,真的好難看懂啊.水平太菜鳥!有時間加注一下可不可以啊?

3 楼

我是菜的啊!
这代码慢慢看不难的!!!呵呵!!

以前我的老师说过不懂装懂你慢慢就懂了!不懂也不要怕!

4 楼

嘿嘿,表加密这个方法是不那么成熟可靠的,还要考虑一下如果异常退出的话你的这种方法就完蛋了。

倒还不如将加密的方法写在程序里,用的时候引用解密函数的值,这样的效果会好些,当然这样会牺牲速度,会带来一些不便,特别是在进行数据测试时。

我来回复

您尚未登录,请登录后再回复。点此登录或注册