flex-php--des加密解密通用代碼

包文件下載地址: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>';


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