講道理,一提到3DES算法,首先想到的是要和java做交互了==
現在3DES已經漸漸被拋棄了,尤其是ECB加密模式使用的更少了,但是沒辦法,業務需要,合作方用的是他,你頭再鐵也不能怎樣,那就扒扒文檔咯
網上完整的php實現以經不多了,CBC加密模式居多,所以我參考了好幾篇文章,整理了一個class出來,共享上來,避免后來人踩坑
感謝前人的整理總結:
PHP版3DES加解密類更新成PKCS5填充模式 (http://blog.163.com/hui_san/blog/static/5710286720103169370195/)
java和php對等的3DES加密算法(http://jamie-wang.iteye.com/blog/1604596)
JAVA和PHP通用的加解密整理版(http://www.blogjava.net/qileilove/archive/2013/09/16/404111.html)
在線測試網址 http://tool.chacuo.net/crypt3des
廢話不多說直接上代碼
<?php /*** Created by PhpStorm.* User: KeenSting* Date: 2017/11/23* Time: 下午2:28* Name: 梁小蒼* Phone: 13126734215* QQ: 707719848* File Description: 3DES_ECB_PKCS5Padding*/classTripleDesEcb{/**加密*@param$text string 文本內容*@param$key string 秘鑰 max 24*@returnstring*/public functionencrypt($text,$key){$iv= mcrypt_create_iv(mcrypt_get_iv_size(MCRYPT_TRIPLEDES,MCRYPT_MODE_ECB),MCRYPT_RAND);$text=$this->pkcs5Pad($text);$td= mcrypt_module_open(MCRYPT_3DES,'',MCRYPT_MODE_ECB,'');mcrypt_generic_init($td,$key,$iv);$data= base64_encode(mcrypt_generic($td,$text));mcrypt_generic_deinit($td);mcrypt_module_close($td);print_r($data);return$data;}/**解密*@param$text*@param$key*/public functiondecrypt($text,$key){$iv= mcrypt_create_iv(mcrypt_get_iv_size(MCRYPT_TRIPLEDES,MCRYPT_MODE_ECB),MCRYPT_RAND);$td= mcrypt_module_open(MCRYPT_3DES,'',MCRYPT_MODE_ECB,'');mcrypt_generic_init($td,$key,$iv);$data=$this->pkcs5UnPad(mdecrypt_generic($td,base64_decode($text)));mcrypt_generic_deinit($td);mcrypt_module_close($td);print_r($data);}/***@param$text*@returnstring*/private functionpkcs5Pad($text){$pad=8- (strlen($text) %8);return$text. str_repeat(chr($pad),$pad);}/***@param$text*@returnbool|string*/private functionpkcs5UnPad($text){$pad= ord($text{strlen($text)-1});if($pad> strlen($text))return false;if(strspn($text,chr($pad),strlen($text) -$pad) !=$pad)return false;returnsubstr($text,0,-1*$pad);}}//test$a=newTripleDesEcb();$r=$a->encrypt('keensting','AA190CD754A89EF100190CD754A89EF1');$a->decrypt($r,'AA190CD754A89EF100190CD754A89EF1');
測試的加密結果經過base64編碼后為:juyYkxc6B+Ym3p8QQdvXIg==,解密即可得到原文(對稱加密算法的加密和解密用的是同一個類)