PB可用的一个不错的可逆加密算法(PB9测试通过)
<p>//加密码,argument name:<br/>//as_pass,需加密字符串<br/>//as_flag=0:加密 as_flag=1:解密<br/>//<br/>Int li_pos,li_count1,li_EpassLast,li_Asc,li_Epass[]<br/>String ls_pass<br/>If as_flag = 0 Then<br/>//转换字符串为二进制码<br/>li_EpassLast=0<br/>For li_pos=1 To Len(as_pass)<br/> li_Asc=Int(Asc(Mid(as_pass,li_pos,1)))<br/> For li_count1=7 To 0 Step -1<br/> li_EpassLast ++<br/> If li_Asc >= 2^li_count1 Then<br/> li_Epass=1<br/> Else<br/> li_Epass=0<br/> End if <br/> li_Asc=Mod(li_Asc,2^li_count1)<br/> Next<br/>Next<br/>//二进制码换位<br/>For li_pos=1 To Int(li_EpassLast / 2)<br/> li_Asc=li_Epass<br/> li_Epass=li_Epass<br/> li_Epass=li_Asc<br/>Next<br/>//已前半部二进制码异或后半部二进制<br/>For li_pos=1 To Int(li_EpassLast / 2)<br/> If li_Epass = 1 Then<br/> li_Epass=abs(li_Epass - 1)<br/> End if <br/>Next<br/>Else //以上过程之逆过程<br/>li_EpassLast=0<br/>For li_pos=1 To Len(as_pass)<br/> li_Asc=Int(Asc(Mid(as_pass,li_pos,1)))-48<br/> For li_count1=3 To 0 Step -1<br/> li_EpassLast ++<br/> If li_Asc >= 2^li_count1 Then<br/> li_Epass=1<br/> Else<br/> li_Epass=0<br/> End if <br/> li_Asc=Mod(li_Asc,2^li_count1)<br/> Next<br/>Next<br/>For li_pos=1 To Int(li_EpassLast / 2)<br/> If li_Epass = 1 Then<br/> li_Epass=abs(li_Epass - 1)<br/> End if <br/>Next</p><p>For li_pos=1 To Int(li_EpassLast / 2)<br/> li_Asc=li_Epass<br/> li_Epass=li_Epass<br/> li_Epass=li_Asc<br/>Next<br/>End if<br/>//转换二进制码为字符串<br/>If as_flag = 0 Then<br/>li_count1=3<br/>Else<br/>li_count1=7<br/>End if<br/>ls_pass=""<br/>li_Asc=0<br/>For li_pos=1 To li_EpassLast<br/>li_Asc=li_Asc+2^li_count1*li_Epass<br/>li_count1 --<br/>If li_count1=-1 Then <br/> If as_flag = 0 Then<br/> ls_pass=ls_Pass+Char(li_Asc+48)<br/> li_count1=3<br/> Else <br/> ls_pass=ls_Pass+Char(li_Asc)<br/> li_count1=7<br/> End if<br/> li_Asc=0<br/>End if<br/>Next<br/>return ls_pass </p><p></p><p>偶原来找的一些在处理特殊字符的时候有问题,这个目前还没发现此类问题。应该适用于PB所有版本,偶在PB9测试通过。</p> 鼎一下,缺陷,不等长 是的。还有就是到10.X后不能用。 不能实现中文字母混合 11.5不能用。现在公司在用11.5,以前老的算法没用了。要支持中文的。郁闷
页:
[1]