我们知道,VFP9.0里有关于BASE64的函数:
STRCONV(cExpression, 13)加密
STRCONV(cExpression, 14)解密
vfp6.0没有次函数
转载一个
DEFINE BASESTR "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/" #DEFINE BASEPAD "=" FUNCTION GetBitStr &&将十进制数转换为6位或8位的二进制格式 PARAMETERS nNum,nBit LOCAL retStr as String ,nMod as Integer ,nGet as Integer retStr="" nGet=nNum nMod=MOD(nGet,2) DO WHILE NOT nGet=0 nMod=MOD(nGet,2) nGet=INT(nGet/2) retStr=ALLTRIM(STR(nMod))+retStr ENDDO RETURN PADL(retStr,nBit,"0") ENDFUNC FUNCTION GetDecNum &&将二进制格式的数字串转换为十进制数 PARAMETERS cBit LOCAL retNum as Integer,nSit as Integer,nTime as Integer ,nLen as Integer , n as Integer retNum=0 nLen=LEN(cBit) FOR n=1 TO nLen-1 nSit=IIF(SUBSTR(cBit,n,1)="1",2,0) nTime=nLen-n retNum=retNum+nSit^nTime ENDFOR retNum=retNum+IIF(RIGHT(cBit,1)="1",1,0) RETURN retNum ENDFUNC FUNCTION GetBase64 &&加密 PARAMETERS strGet LOCAL retStr as String ,n as Integer ,nLen as Integer ,tmpBitStr as String ,nAdd as Integer retStr="" tmpBitStr="" nLen=LEN(strGet) FOR n=1 TO nLen tmpBitStr=tmpBitStr+GetBitStr(ASC(SUBSTR(strGet,n,1)),8) ENDFOR nAdd=IIF(LEN(tmpBitStr)%6=0,0,6-LEN(tmpBitStr)%6) tmpBitStr=tmpBitStr+REPLICATE("0",nAdd) FOR n=1 TO LEN(tmpBitStr) STEP 6 retStr=retStr+SUBSTR(BASESTR,GetDecNum(SUBSTR(tmpBitStr,n,6))+1,1) ENDFOR RETURN retStr+REPLICATE(BASEPAD,nAdd/2) ENDFUNC FUNCTION FromBase64 &&解密 PARAMETERS strFromR LOCAL retStr as String , strFrom as String ,n as Integer ,nLen as Integer ,tmpBitStr as String ,nAdd as Integer nAdd=OCCURS(BASEPAD,strFromR) strFrom=STRTRAN(strFromR,BASEPAD,"") retStr="" tmpBitStr="" nLen=LEN(strFrom) FOR n=1 TO nLen tmpBitStr=tmpBitStr+GetBitStr(AT(SUBSTR(strFrom,n,1),BASESTR)-1,6) ENDFOR tmpBitStr=LEFT(tmpBitStr,nLen*6-2*nAdd) FOR n=1 TO LEN(tmpBitStr) STEP 8 retStr=retStr+CHR(10)+ALLTRIM(STR(GetDecNum(SUBSTR(tmpBitStr,n,8)))) ENDFOR *GB2312规定“对任意一个图形字符都采用两个字节表示,每个字节均采用七位编码表示”, *习惯上称第一个字节为“高字节”,第二个字节为“低字节”。 *GB2312中汉字的编码范围为: *第一个字节0xB0-0xF7(对应十进制为176-247), *第二个字节0xA0-0xFE(对应十进制为160-254)。 *高字节码X256+低字节码,就是汉字的ASC码,如: *好的高字节186,低字节195,好的ASC码就是186*256+195=47811 ALINES(aStr,RetStr) retStr="" n=1 DO WHILE n<=ALEN(aStr) IF VAL(aStr(n))>=176 AND VAL(aStr(n))<=247 retStr=retStr+CHR(VAL(aStr(n))*256+VAL(aStr(n+1))) n=n+2 ELSE retStr=retStr+CHR(VAL(aStr(n))) n=n+1 ENDIF ENDDO RETURN retStr ENDFUNC
» 转载请注明来源:网络蛀虫小窝 » 《用VFP编的BASE64加密和解密函数(转载)》» 本站地址:http://www.gomoth.com
- 您可能感兴趣的相关文章