global type gf_pass from function_object
end type
forward prototypes
global function string gf_pass (string as_pass, integer as_flag)
end prototypes
global function string gf_pass (string as_pass, integer as_flag);//====================================================================
// Declare: gf_pass.
//--------------------------------------------------------------------
// 描述: 加密解密字符串
//--------------------------------------------------------------------
// 参数: as_pass,需加密字符串
// as_flag=0:加密 as_flag=1:解密
//--------------------------------------------------------------------
// 返回:
//====================================================================
Int li_pos,li_count1,li_EpassLast,li_Asc,li_Epass[]
String ls_pass
If as_flag = 0 Then
//转换字符串为二进制码
li_EpassLast=0
For li_pos=1 To Len(as_pass)
li_Asc=Int(Asc(Mid(as_pass,li_pos,1)))
For li_count1=7 To 0 Step -1
li_EpassLast ++
If li_Asc >= 2^li_count1 Then
li_Epass[li_EpassLast]=1
Else
li_Epass[li_EpassLast]=0
End if
li_Asc=Mod(li_Asc,2^li_count1)
Next
Next
//二进制码换位
For li_pos=1 To Int(li_EpassLast / 2)
li_Asc=li_Epass[li_pos]
li_Epass[li_pos]=li_Epass[li_EpassLast + 1 - li_pos]
li_Epass[li_EpassLast +1 - li_pos]=li_Asc
Next
//已前半部二进制码异或后半部二进制
For li_pos=1 To Int(li_EpassLast / 2)
If li_Epass[li_pos] = 1 Then
li_Epass[li_EpassLast + 1 - li_pos]=abs(li_Epass[li_EpassLast + 1 - li_pos] - 1)
End if
Next
Else //以上过程之逆过程
li_EpassLast=0
For li_pos=1 To Len(as_pass)
li_Asc=Int(Asc(Mid(as_pass,li_pos,1)))-48
For li_count1=3 To 0 Step -1
li_EpassLast ++
If li_Asc >= 2^li_count1 Then
li_Epass[li_EpassLast]=1
Else
li_Epass[li_EpassLast]=0
End if
li_Asc=Mod(li_Asc,2^li_count1)
Next
Next
For li_pos=1 To Int(li_EpassLast / 2)
If li_Epass[li_pos] = 1 Then
li_Epass[li_EpassLast + 1 - li_pos]=abs(li_Epass[li_EpassLast + 1 - li_pos] - 1)
End if
Next
For li_pos=1 To Int(li_EpassLast / 2)
li_Asc=li_Epass[li_pos]
li_Epass[li_pos]=li_Epass[li_EpassLast + 1 - li_pos]
li_Epass[li_EpassLast +1 - li_pos]=li_Asc
Next
End if
//转换二进制码为字符串
If as_flag = 0 Then
li_count1=3
Else
li_count1=7
End if
ls_pass=""
li_Asc=0
For li_pos=1 To li_EpassLast
li_Asc=li_Asc+2^li_count1*li_Epass[li_pos]
li_count1 --
If li_count1=-1 Then
If as_flag = 0 Then
ls_pass=ls_Pass+Char(li_Asc+48)
li_count1=3
Else
ls_pass=ls_Pass+Char(li_Asc)
li_count1=7
End if
li_Asc=0
End if
Next
return ls_pass
end function