包文件下载地址:http://download.csdn.net/detail/jiguoguo/7033045
导入com包后 代码如下 key 和iv必须8位。多了后两边就不同了
protected function phpToAs3Encode(plain:String):String
{
import com.hurlant.crypto.hash.HMAC;
import com.hurlant.crypto.hash.IHash;
import com.hurlant.crypto.hash.MD2;
import com.hurlant.crypto.hash.MD5;
import com.hurlant.crypto.hash.SHA1;
import com.hurlant.crypto.hash.SHA224;
import com.hurlant.crypto.hash.SHA256;
import com.hurlant.crypto.prng.ARC4;
import com.hurlant.crypto.rsa.RSAKey;
import com.hurlant.crypto.symmetric.AESKey;
import com.hurlant.crypto.symmetric.BlowFishKey;
import com.hurlant.crypto.symmetric.CBCMode;
import com.hurlant.crypto.symmetric.CFB8Mode;
import com.hurlant.crypto.symmetric.CFBMode;
import com.hurlant.crypto.symmetric.CTRMode;
import com.hurlant.crypto.symmetric.DESKey;
import com.hurlant.crypto.symmetric.ECBMode;
import com.hurlant.crypto.symmetric.ICipher;
import com.hurlant.crypto.symmetric.IMode;
import com.hurlant.crypto.symmetric.IPad;
import com.hurlant.crypto.symmetric.ISymmetricKey;
import com.hurlant.crypto.symmetric.IVMode;
import com.hurlant.crypto.symmetric.NullPad;
import com.hurlant.crypto.symmetric.OFBMode;
import com.hurlant.crypto.symmetric.PKCS5;
import com.hurlant.crypto.symmetric.SimpleIVMode;
import com.hurlant.crypto.symmetric.TripleDESKey;
import com.hurlant.crypto.symmetric.XTeaKey;
import com.hurlant.util.Base64;
import flash.utils.ByteArray;
var iv2:String = '12345678'; //key和 iv 可以自己定义不同的
var key2:String = '12345678';
var key:ByteArray = new ByteArray();
key.writeUTFBytes(key2);
var iv:ByteArray= new ByteArray();
iv.writeUTFBytes(iv2);
var des:DESKey = new DESKey(key);
var cbc:CBCMode = new CBCMode(des); //加密模式 ,有多种模式供你选择
cbc.IV = iv; //设置加密的IV
/* 得到的密文长度和明文的长度有关,规律大致是:明文<8 密文=12 ,明文<16 密文=24 ,明文>=16 密文=32......后面希望你们推一下*/
//var plain:String = "123456789"; //明文
var tmpByteArray:ByteArray = convertStringToByteArray(plain); //转换成二进制编码 (该函数自己定义)
cbc.encrypt(tmpByteArray); //利用加密模式对数据进行加密
var as3Str:String = Base64.encodeByteArray(tmpByteArray); //利用base64对密文进行编码
return as3Str;
//trace("as3Str = "+as3Str);//输出结果 为: PXWVqYv/gJ04WpM5vlT9gg==
}
public function convertStringToByteArray(str:String):ByteArray
{
var bytes:ByteArray;
if (str)
{
bytes=new ByteArray();
bytes.writeUTFBytes(str);
}
return bytes;
}
下面是php代码
$key='12345678';
$iv="12345678";
$encrypt='123456789'; //被加密的字符串 PXWVqYv/gJ04WpM5vlT9gg==
$tb=mcrypt_module_open(MCRYPT_3DES,'','cbc',''); //创建加密环境,要AES就把MCRYPT_3DES替换成"rijndael-128" 128/8 = 16 字节 表示IV的长度
mcrypt_generic_init($tb,$key,$iv); //初始化加密算法
$encrypt=$this->PaddingPKCS7($encrypt);
$cipher=mcrypt_generic($tb,$encrypt); //执行加密
$cipher=base64_encode($cipher);
mcrypt_generic_deinit($tb);
mcrypt_module_close($tb);
echo $encrypt.' DES 加密后= '.$cipher.'<br>';
echo " 密文长度 = ".strlen($cipher);
//解密
$tb=mcrypt_module_open(MCRYPT_3DES,'','cbc','');
mcrypt_generic_init($tb,$key,$iv);
$cipher=base64_decode($cipher);
$pain=mdecrypt_generic($tb,$cipher);
mcrypt_generic_deinit($tb);
mcrypt_module_close($tb);
echo base64_encode($cipher).'解密后 11= '.$pain.'<br>';