C++加密解密php代码的方法
本文实例讲述了C++加密解密php代码的方法。分享给大家供大家参考。具体实现方法如下:
#include"php.h" #include"php_ini.h" #include"ext/standard/info.h" #include"string.h" char*key="abcd"; PHP_FUNCTION(encode){ longkey_len=strlen(key); char*code,*encode_code; longcode_len; if(zend_parse_parameters(ZEND_NUM_ARGS()TSRMLS_CC,"s",&code,&code_len)==FAILURE){ return; } encode_code=encode(code,code_len,key,key_len); RETURN_STRING(encode_code,0); } PHP_FUNCTION(decode){ longkey_len=strlen(key); char*code,*decode_code; longcode_len; if(zend_parse_parameters(ZEND_NUM_ARGS()TSRMLS_CC,"s",&code,&code_len)==FAILURE){ return; } decode_code=decode(code,code_len,key,key_len); RETURN_STRING(decode_code,0); } PHP_FUNCTION(run){ char*en_base64_code; longen_base64_code_len; char*decode_code; longkey_len=strlen(key); char*eval_code; char*str_name; if(zend_parse_parameters(ZEND_NUM_ARGS()TSRMLS_CC,"s",&en_base64_code,&en_base64_code_len)==FAILURE){ return; } str_name=zend_make_compiled_string_description("phpencoder"TSRMLS_CC); decode_code=decode(en_base64_code,en_base64_code_len,key,key_len);//解码 spprintf(&eval_code,0,"?>%s<?php",decode_code); free(decode_code); if(zend_eval_string(eval_code,NULL,str_nameTSRMLS_CC)==FAILURE){//解析失败 efree(str_name); efree(eval_code); php_error_docref(NULLTSRMLS_CC,E_RECOVERABLE_ERROR,"Pleasemakesure'<?php'endwith'?>'",PHP_EOL); RETURN_FALSE; } efree(str_name); efree(eval_code); RETURN_TRUE; } inlinechar*encode(char*code,longcode_len,char*key,longkey_len){ char*code_encode; inti; longoffset=0,ret_len; code_encode=strdup(code); for(i=0;i<code_len;i++){ if(offset==key_len){ offset=0; } *(code_encode+i)=*(code+i)^*(key+offset); offset++; } returnphp_base64_encode(code_encode,code_len,&ret_len);//base64加密 } inlinechar*decode(char*code,longcode_len,char*key,longkey_len){ char*code_decode; char*nobase_code; inti; longoffset=0,ret_len; zend_boolstrict=0; code_decode=strdup(code); nobase_code=php_base64_decode_ex((unsignedchar*)code,code_len,&ret_len,strict);//解密,ret_len返回长度 for(i=0;i<ret_len;i++){ if(offset==key_len){ offset=0; } *(code_decode+i)=*(nobase_code+i)^*(key+offset); offset++; } *(code_decode+i)='\0'; returncode_decode; }
希望本文所述对大家的C++程序设计有所帮助。