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++程序设计有所帮助。