php写的AES加密解密类分享

时间:2016.04.18 发布人:tianyuzhaoyu

php写的AES加密解密类分享

已解决问题

谷歌tianyuzhaoyu用户在2016.04.18提交了关于“中山陵php写的AES加密解密类分享”的提问,欢迎大家涌跃发表自己的观点。目前共有1个回答,最后更新于2024-12-28T20:37:33。希望大家能够帮助她。

详细问题描述及疑问:期待您的答案,希望你能感受到,我最真诚的谢意 !

希望以下的回答,能够帮助你。

第1个回答

用户名:REU667  

今天写了一个php的AES加密类。志云握适用于Yii的扩展。
如果不用在Yii框架中,把代码中Yii::app()->params['encryptKey']换成你对应的默认key就可面令黄以预损氧京城训氧以了。
类代码:

<?p问答hp/***phpAES加解天编你呢米原兵几展都据密类*如果要与j**a**用,则密钥长度应该为16位长度*因为j**a只支持128位加密,所以php也用128位加密,可以与j**a互转。*同时AES的标准也是128位。只是RIJNDAEL算法可以支持128,192和然联孔时足省冷满定256位加密。*ja唱超面帝团械纪va要使用AES/CBC/NoPadding标准来加解密**@authorTerry**/c总术lassPhpAes{/***ThiswasA错叫背为富饭ES-128/CBC/NoPaddingencrypted.*returnbase肥输64_encodestring*@authorTerry括局断史可工电敌控*@paramstr帝死医ing$plaintext*@paramstring$key*/publicstaticfunctionAesEncrypt($plainte磁旧序新水xt,$key=n压困环鲜ull){$plaintext=trim($plaintext);if($plaintext=='')return'';if(!extension_loaded('mcrypt'))thrownewCException(Yii变诗山主::t('yii','AesEncryptrequiresPh**Pmcryptextensiontobeloadedinordertousedataencry解发判氢我整美ptionfeature.'));$size=mcrypt_get_block_size(MCRYPT_RIJNDAEL_应款通善谁持板春式128,MCRYPT_MODE_C久BC);$mo**le=mcrypt_module_open(MCRYPT_RIJNDAEL_128,'',MCRYPT_MODE_CBC,'');$key=self::substr($key===**ll?Yii::app()->params['encryptKey']:$key,0,mcrypt_enc_get_key_size($mo**le));/*Cre粒乡atetheIVanddeterminethekeysizelength,useMCRYPT_RAND*onWindowsinstead*/$iv=substr(md5($key),0,mcrypt_enc_get_iv_size($mo**le));/*Intializeencryption*/mcrypt_generic_init($mo**le,$key,$iv);/*Encryptdata*/$encrypted=mcrypt_generic($mo**le,$plaintext);/*Terminateencryptionhandler*/mcrypt_generic_deinit($mo**le);mcrypt_mo**le_close($mo**le);returnbase64_encode($encrypted);}/***ThiswasAES-128/CBC/NoPaddingdecrypted.*@authorTerry*@paramstring$encryptedbase64_encodeencryptedstring*@paramstring$key*@throwsCException*@returnstring*/publicstaticfunctionAesDecrypt($encrypted,$key=**ll){if($encrypted=='')return'';if(!extension_loaded('mcrypt'))thrownewCException(Yii::t('yii','AesDecryptrequiresPh**Pmcryptextensiontobeloadedinordertousedataencryptionfeature.'));$ciphertext_dec=base64_decode($encrypted);$mo**le=mcrypt_mo**le_open(MCRYPT_RIJNDAEL_128,'',MCRYPT_MODE_CBC,'');$key=self::substr($key===**ll?Yii::app()->params['encryptKey']:$key,0,mcrypt_enc_get_key_size($mo**le));$iv=substr(md5($key),0,mcrypt_enc_get_iv_size($mo**le));/*Initializeencryptionmo**lefordecryption*/mcrypt_generic_init($mo**le,$key,$iv);/*Decryptencryptedstring*/$decrypted=mdecrypt_generic($mo**le,$ciphertext_dec);/*Terminatedecryptionhandleandclosemo**le*/mcrypt_generic_deinit($mo**le);mcrypt_mo**le_close($mo**le);returnrtrim($decrypted,"\0");}/***Returnsthelengthofthegivenstring.*If**ailableusesthemultibytestringfunctionmb_strlen.*@paramstring$stringthestringbeingmeasuredforlength*@returnintegerthelengthofthestring*/privatestaticfunctionstrlen($string){returnextension_loaded('mbstring')?mb_strlen($string,'8bit'):strlen($string);}/***Returnstheportionofstringspecifiedbythestartandlengthparameters.*If**ailableusesthemultibytestringfunctionmb_substr*@paramstring$stringtheinputstring.Mustbeonecharacterorlonger.*@paraminteger$startthestartingposition*@paraminteger$lengththedesiredportionlength*@returnstringtheextractedpartofstring,orFAL**onfailureoranemptystring.*/privatestaticfunctionsubstr($string,$start,$length){returnextension_loaded('mbstring')?mb_substr($string,$start,$length,'8bit'):substr($string,$start,$length);}}