使用MD5算法加密VFP数据

文章作者 100test 发表时间 2007:03:10 19:06:36
来源 100Test.Com百考试题网


使用MD5算法加密VFP数据

我们的VFP数据太开放了些,用Excel随便打开一个DBF表,里面的数据就一览无遗。如果数据是比较敏感的话,可就坏事了。例如:我的数据录入员的程序登录密码是放在一个VFP表里,经过加密,就算用Excel打开DBF表,也是看不到密码的。从一个随书资料盘上见到此段代码,供大家参考。
------------------------------------

********md5.prg**********

FUNCTION LShift(lvalue, iShiftBits)
IF iShiftBits = 0
RETURN lvalue
ELSE
IF iShiftBits = 31
IF BITAND(lvalue , 1)<>0
RETURN 0x80000000
ELSE
RETURN 0
ENDIF
ENDIF
ENDIF

IF BITAND(lvalue , m_l2Power(31 - iShiftBits))<>0
RETURN BITOR( (BITAND(lvalue , m_lOnBits(31 - (iShiftBits 1))) * m_l2Power(iShiftBits)) , 0x80000000)
ELSE
RETURN (BITAND(lvalue , m_lOnBits(31 - iShiftBits)) * m_l2Power(iShiftBits))
ENDIF
ENDFUNC

FUNCTION RShift(lvalue, iShiftBits)
IF iShiftBits = 0
RETURN lvalue
ELSE
IF iShiftBits = 31
IF BITAND(lvalue , 0x80000000)
RETURN 1
ELSE
RETURN 0
ENDIF
ENDIF
ENDIF
RShift2 = INT(BITAND(lvalue , 0x7FFFFFFE) / m_l2Power(iShiftBits))
IF BITAND(lvalue , 0x80000000)<>0
RShift2 =BITOR (RShift2 , INT(0x40000000 / m_l2Power(iShiftBits - 1)))
ENDIF

RETURN RShift2
ENDFUNC

FUNCTION RotateLeft(lvalue, iShiftBits)
RETURN BITOR(LShift(lvalue, iShiftBits) ,RShift(lvalue, (32 - iShiftBits)))
ENDFUNC

FUNCTION AddUnsigned(lX, lY)

lX8 = BITAND(lX , 0x80000000)
lY8 = BITAND(lY , 0x80000000)
lX4 = BITAND(lX , 0x40000000)
lY4 = BITAND(lY , 0x40000000)

lResult = BITAND(lX , 0x3FFFFFFF) BITAND(lY , 0x3FFFFFFF)

IF BITAND(lX4 , lY4)<> 0
lResult = BITXOR(BITXOR(BITXOR(lResult , 0x80000000) , lX8) , lY8)
ELSE
IF BITOR(lX4 , lY4)<> 0
IF BITAND(lResult , 0x40000000)<> 0
lResult = BITXOR(BITXOR(BITXOR(lResult , 0xC0000000) , lX8) , lY8)
ELSE
lResult = BITXOR(BITXOR(BITXOR(lResult , 0x40000000) , lX8) , lY8)
ENDIF
ELSE
lResult = BITXOR(BITXOR( lResult , lX8) , lY8)
ENDIF
ENDIF
RETURN lResult
ENDFUN

C

FUNCTION md5_F(x, y, z)
RETURN BITOR(BITAND(x , y) , BITAND(BITNOT(x) , z))
ENDFUNC

FUNCTION md5_G(x, y, z)
RETURN BITOR(BITAND(x , z) , BITAND(y , BITNOT(z)))
ENDFUNC

FUNCTION md5_H(x, y, z)
RETURN BITXOR(BITXOR(x , y) , z)
ENDFUNC

FUNCTION md5_I(x, y, z)
RETURN BITXOR(y , BITOR(x , BITNOT(z)))
ENDFUNC

PROCEDURE md5_FF(a, b, c, d, x, s, ac)
a = AddUnsigned(a, AddUnsigned(AddUnsigned(md5_F(b, c, d), x), ac))
a = RotateLeft(a, s)
a = AddUnsigned(a, b)
ENDPROC

PROCEDURE md5_GG(a, b, c, d, x, s, ac)
a = AddUnsigned(a, AddUnsigned(AddUnsigned(md5_G(b, c, d), x), ac))
a = RotateLeft(a, s)
a = AddUnsigned(a, b)
ENDPROC

PROCEDURE md5_HH(a, b, c, d, x, s, ac)
a = AddUnsigned(a, AddUnsigned(AddUnsigned(md5_H(b, c, d), x), ac))
a = RotateLeft(a, s)
a = AddUnsigned(a, b)
ENDPROC

PROCEDURE md5_II(a, b, c, d, x, s, ac)
a = AddUnsigned(a, AddUnsigned(AddUnsigned(md5_I(b, c, d), x), ac))
a = RotateLeft(a, s)
a = AddUnsigned(a, b)
ENDPROC

FUNCTION Hex(lByte)
x=’’
DO WHILE lByte>0
IF lByte>=16
y=lByte
ELSE
y=lByte
ENDIF
IF y<10 .and. y>=0
x=STR(y,1) x
ELSE
x=CHR(65 y-10) x
ENDIF
lByte=(lByte-y)/16
ENDDO
RETURN x
ENDFUNC

FUNCTION WordToHex(lvalue)

lResult=’’
FOR lCount = 0 TO 3
lByte = BITAND(RShift(lvalue, lCount * BITS_TO_A_BYTE) , m_lOnBits(BITS_TO_A_BYTE ))
lResult = lResult RIGHT("0" Hex(lByte), 2)
ENDFOR
RETURN lResult

ENDFUNC


相关文章


对网络备考学习的一点想法
计算机认证考试的比较
献给所有考级的朋友--三级经验与教训:三级之路!
计算机等级考试应如何备考
使用MD5算法加密VFP数据
C语言笔试轻松过—也谈二级C应试技巧
一级b和一级ms-office的区别
全国计算机等级考试上机考试应试技巧(一)
全国计算机等级考试上机考试应试技巧(二)
澳大利亚华人论坛
考好网
日本华人论坛
华人移民留学论坛
英国华人论坛