开发的票务系统的时候对接了各大的OTA[携程,美团,同程,驴妈妈等],因为我们系统用了PHP开发,但是呢,这几个OTA都是Java系统开发的,公司中也没有配备PHP专职的开发,造成的问题就是,他们的PHP的demo还停留在PHP5.6之前的时代。问题就是在升级PHP7之后,encrypt扩展直接就完全不支持了。那么问题就来了,下了demo的用PHP7的小伙伴就麻烦了。后来查了好多资料,发现了PHP的openssl扩展显现出了实力。下面就给大家讲下encrypt扩展 迁移到 openssl扩展的方式
demo上的代码时这样的:
- <?php
- class Aes{
- private $key = '6b4d63211b4ba869';
- private $iv = 'dbbf079b95004f65';
- public function aes128_cbc_encrypt($data) {
- $key = $this->key;
- $iv = $this->iv;
- }
-
- public function aes128_cbc_decrypt($data) {
- $key = $this->key;
- $iv = $this->iv;
- $data = mcrypt_decrypt(MCRYPT_RIJNDAEL_128, $key, $this->decode_bytes($data), MCRYPT_MODE_CBC, $iv);
- }
-
- public function decode_bytes($text){
- for($i=0;$i<strlen($text);$i+=2){
- $char=$text[$i];
- $char=$text[$i+1];
- }
-
- }
-
- public function encode_bytes($text){
- for($i=0;$i<strlen($text);$i++){
- }
-
- }
- }
-
- $encrypted = 'ppmbnoahlffbpbjjhfegchdhjclbfpfaiopkmlflbohfphaagkndomcehakaopefmakbgenlomplmmpdmehffndpbmdmhgdaagddnhaifblckgendbajmjiafhcgpmjeabmbhaechabcadgpbcaiipcjmkdjidpnljhkedmghmepmmmkmcilpdaajcpdgkjknjlmfhmmdmeppdgppdamagokhjpmfggkkkcoihmaoakachkkomhjnienajiafojbbhfcohnjakcpneacofbmcdlfodhldhipipkbkghjiebejcahfcpoecbbdfmhdibodabhhklkjdgaljkhcffjkocahdkmchdhpegpgbapgcjdcigjchpjpogkgdaifaaipipccbmkeemhjecojohmcbfaacffgcfgidhhlijnminobnkjkphpdgkagpniimebjcfjlmaahllkpgplacbmlomajjilceffnfpljjaaddcpemjidpflenhjcjdebkcmbikfdjoefoallfnphflodmmbfinbfjhkbccgkppodahlnegdjmgliodhogmdelpiodogpkhahmjioojppmlikfkkkandkahdemccanfjlpikcccbhfkomdhlbndckeldlpdbnlngeclnjlleijlckpgleccbgbikjdlffcinkcknohdgejdhhnafmmagmcklekcalgehdgjnopfbclloolfpemdlaeigmibhgfpekdliebdjaekmbhclggkompigfddggmlnfgmaiehchlbjolmpnoddkihdfpfhpalbmgiilibooenngbbjblcbdleenhjcefnkdgmpbimhckgajlabljcjklfccmjncelphgggjilenhlnpjichiakijoohkppciblgnjdfpjlejglomdapccobblikhkbldffdljidbijblhfbdbglmihdhcclokagoolbpmlhagambeiphldgijnljkeibeaoofbniaifaambdidhchhomjndfmgffonbemboampjiolcndgnhhmnphofojpcnganphhfdmidmonmgbbafpfehigjmbjgdpkchjcodfiffmhladiockoaenljibmnadajdejanihgnohdagfennjkpepfmohemihojcehlephiegmmepaechepmpgejaafphnmkbnklldpliiadihdncdmobaodoghnpfopfejecglnmhhjlminmpfpbkjlhkegdioogefmoocbchnmkddcojjnhdalbcffmldfaihgpgncdjlnijeieddecdmhdoihoccfekcjgmpfhjpcfgdjbenkmmoknlobaihedjfgkonlglcbckpmgcgdeghjfefghhjfmnimhdpjejkelbofojeiloccdpmpembfpkdgignmkcopdganmmfjhhghbhghmflnldhhlaakijpggdbddiiamdnpljdobmckoaddlidiakepmbcfflineldjlefhdpdbmajmhcnnkcggombeonjheocojbhcjmfncdfjnlkibipkfjlbolcicgacdiebnchaafhjbiaalddcghpelbninjfcnbfmebkekbenliclimoknlpppgpkcbeaokfkgdafndepkbfjohdhdplmgpanamhimgkimmjpfcbcnbpjhglnpcfejkennjpieiceflbfbphgmdgkjliaaejgemfgmfiddcaecacfmdhmkdhblkijnandiddjobeelbahhhkaddffiphgnlmghjpdjbihcoekckfmkbokonoddfikaakaejaopekbhldpbmhhgdldjhbckjfjimccfchgnbcjpmiidiijkekijgcmgaoglimaoknmhgpghpjcodoblageapioildelbgibcdbfaiomcmlf';
-
- $decrypt = '{"otaOrderId":"ctriptest-750476","sequenceId":"2019032816551049c5e34f57fc4a8ca9e4af8caf5b0ccb","confirmType":2,"items":[{"passengers":[{"cardIssuePlace":"","lastName":"","cardIssueCountry":"","shoeSize":0,"gender":"M","cardIssueDate":"","intlCode":"","nationalityName":"","mobile":"17600768354","cardType":"1","weight":0,"myopiaDegreeL":0,"birthDate":"1993-07-24","cardNo":"1301333199307243318","ageType":"ADU","myopiaDegreeR":0,"firstName":"","birthPlace":"","nationalityCode":"","name":"测试","cardValidDate":"","height":0}],"cost":0.00,"quantity":1,"remark":"这是备注","useEndDate":"2019-03-28","useStartDate":"2019-03-28","itemId":"ctriptest-750476-0","priceCurrency":"CNY","adjunctions":[],"price":49.00,"PLU":"472","deposit":{},"distributionChannel":"XCW","costCurrency":"HKD","expressDelivery":{"type":1}}],"contacts":[{"intlCode":"","name":"测试","mobile":"17600768354","optionalMobile":"","optionalIntlCode":"","email":"1450610915@qq.com"}]}';
-
- $aec = new Aes();
- //加密
- echo $aec->aes128_cbc_decrypt($encrypted);
- echo "<br>";
- //解密
- echo $aec->aes128_cbc_encrypt($decrypt);
接入到PHP7之后直接就是报错了,因为扩展无法引入,强行支持的话那稳定性就无法确定了;
重新转换了之后的代码贴下:
- /*
- 模式:
- AES-128-CBC
- AES-128-CFB
- AES-128-CFB1
- AES-128-CFB8
- AES-128-OFB
- AES-192-CBC
- AES-192-CFB
- AES-192-CFB1
- AES-192-CFB8
- AES-192-OFB
- AES-256-CBC
- AES-256-CFB
- AES-256-CFB1
- AES-256-CFB8
- AES-256-OFB
- BF-CBC
- BF-CFB
- BF-OFB
- CAST5-CBC
- CAST5-CFB
- CAST5-OFB
- IDEA-CBC
- IDEA-CFB
- IDEA-OFB
- */
- /**
- * 对明文进行解密
- * @param string $data 需要解密的字符串
- * @return string 加密后的密文
- */
-
-
- public function openssldecrypt($data)
- {
- $decodemode = "des-ede3";
- // 代码先base64编码下,这样错误的几率会小点哦
- return $decrypted;
- }
-
- /**
- * 对明文进行加密
- * @param string $text 需要加密的明文
- * @return string 加密后的密文
- */
-
- public function opensslencrypt($data)
- {
- $decodemode = "des-ede3";
- $key = "aassddffgghh"; // 密钥 可以缺省的
- $decrypted = openssl_encrypt($data,$decodemode, $key ,0);
- return $decrypted;
- }
携程的开发因为先一步升级了系统,先乐玩系统已经不使用旧的encrypt加密算法了,但是demo也取消了。只能靠大家自己摸索了,其他的OTA因为业务拓展的问题没有升级。苦了各位Java开发了。
系统我修改之后的代码集可以帮助后来的PHP小伙伴吧。