paip.PHP实现跨平台跨语言加解密方法

paip.PHP实现跨平台跨语言加解密方法

主要是要在ASP和PHP系统模块间进行参数传递,为了方便,不用MD5签名,直接准备使用DES

加密。。可是ASP和PHP的DES不能相互加觖密。。。好向还有什么CBC模式,IV向量什么的。一

大堆,调了半天还是不行,算了,还是自己写加密方法吧。。

密码加密主要的方法就是替换,移位。。另外,

我的要求是,

1.需要可以使用密钥

2.需要算法简单,可以很容易用另外一种语言重写。。DES算法一看就是一大陀,MD,难用。

PASS。。。虽然效果好,有点复杂,不好重写啊。。

3.根据强度可以自由组合算法,为了加强加密 效果,可以使用多种翻转算法,这里为了简单,只是

全部翻转了一下而已。。。

4.可以多条密钥使用,可以大大加强效果,不输于DES,3DES一类的。

5.加密非ASCII字符:不可直接加密。。可先用BASE64,URLENCODE转成ASCII字符串再进行

加密就可能邓..

这里,我构思了下加密觖密的思路:

1.先把字符串进行反转

2.把字符串与KEY组进行循环相加

3.相加的结果转为16进制字符连起来。。主要是为了省点空间。。

4.返回结果就可 以了。。。

5.解密的过程反过来就可以了。。

PHP调用演示:

$key="iluvnjyn";

echo atiDecode("D7D5E2DACF",$key); 显示了解密结果“admin"

ASP加密演示:

key_L71723="iluvnjyn"

msg="admin"

newstr=atiEncode(msg,key_L71723) //生成加密结果"D7D5E2DACF"

---------------------------PHP源码------------------

//解密方法

function atiDecode($msg,$key){

$key_L71723= $key;

$key_L71723=$key_L71723.$key_L71723;

$key_L71723=$key_L71723.$key_L71723;

$key_L71723=$key_L71723.$key_L71723;;

$key_L71723=$key_L71723.$key_L71723;;

//$msgarr=explode("-",$msg); //split

$msgarr=str_split($msg,2);

$keyarr= str_split($key_L71723);

$newstr="";

for($i=0;$i< count ($msgarr);$i++){

$v=$msgarr[$i];

$charInt=hexdec($v);// 'encode char

$keychar=$keyarr[$i];

$newchar=chr( $charInt-ord($keychar));

$newstr=$newstr.$newchar;

}

$newstr=strrev($newstr);

//'newstr=base64Encode(newstr)

return $newstr;

}

---------------ASP加密方法源码

function atiEncode(msg,key)

msg=back_str(msg) '反转字符串

dim key_L71723

key_L71723= key

key_L71723=key_L71723+key_L71723

key_L71723=key_L71723+key_L71723

key_L71723=key_L71723+key_L71723

dim msgarr

msgarr=str2array(msg)

dim keyarr

keyarr=str2array(key_L71723)

dim newstr

newstr=""

'与KEY组进行循环相加

for i=0 to ubound(msgarr)

dim char

char=msgarr(i)

dim newchar 'int format

newchar = asc (char)+asc(keyarr(i))

newchar= hex(newchar)

newstr=newstr+cstr(newchar)

next

atiEncode=newstr

end function