pb 字符串加密解密

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

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章