C++加密解密php代码的方法

 更新时间:2020年4月25日 17:38  点击:1621

本文实例讲述了C++加密解密php代码的方法。分享给大家供大家参考。具体实现方法如下:

#include "php.h"
#include "php_ini.h"
#include "ext/standard/info.h"
#include "string.h"
char * key = "abcd";
PHP_FUNCTION(encode){
  long key_len = strlen(key);
  char * code, * encode_code;
  long code_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){
  long key_len = strlen(key);
  char * code, * decode_code;
  long code_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;
  long en_base64_code_len;
  char * decode_code;
  long key_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_name TSRMLS_CC) == FAILURE){ //解析失败
    efree(str_name);
    efree(eval_code);
    php_error_docref(NULL TSRMLS_CC, E_RECOVERABLE_ERROR, "Please make sure '<?php' end with '?>'", PHP_EOL);
    RETURN_FALSE;
  }
  efree(str_name);
  efree(eval_code);
  RETURN_TRUE;
}
inline char * encode(char * code, long code_len, char* key, long key_len){
  char * code_encode;
  int i;
  long offset = 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 ++;
  }
  return php_base64_encode(code_encode, code_len, &ret_len); //base64 加密
}
inline char * decode(char * code,long code_len, char* key, long key_len){
  char * code_decode;
  char * nobase_code;
  int i;
  long offset = 0, ret_len;
  zend_bool strict = 0;
  code_decode = strdup(code);
  nobase_code = php_base64_decode_ex((unsigned char*)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';
  return code_decode;
}

希望本文所述对大家的C++程序设计有所帮助。

[!--infotagslink--]

相关文章

  • C++ STL标准库std::vector的使用详解

    vector是表示可以改变大小的数组的序列容器,本文主要介绍了C++STL标准库std::vector的使用详解,文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...2022-03-06
  • 图解PHP使用Zend Guard 6.0加密方法教程

    有时为了网站安全和版权问题,会对自己写的php源码进行加密,在php加密技术上最常用的是zend公司的zend guard 加密软件,现在我们来图文讲解一下。 下面就简单说说如何...2016-11-25
  • C++中取余运算的实现

    这篇文章主要介绍了C++中取余运算的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧...2021-02-23
  • 详解C++ string常用截取字符串方法

    这篇文章主要介绍了C++ string常用截取字符串方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧...2020-04-25
  • C++调用C#的DLL程序实现方法

    本文通过例子,讲述了C++调用C#的DLL程序的方法,作出了以下总结,下面就让我们一起来学习吧。...2020-06-25
  • C++中四种加密算法之AES源代码

    本篇文章主要介绍了C++中四种加密算法之AES源代码,小编觉得挺不错的,现在分享给大家,也给大家做个参考。...2020-04-25
  • C++ 整数拆分方法详解

    整数拆分,指把一个整数分解成若干个整数的和。本文重点给大家介绍C++ 整数拆分方法详解,非常不错,感兴趣的朋友一起学习吧...2020-04-25
  • C++中 Sort函数详细解析

    这篇文章主要介绍了C++中Sort函数详细解析,sort函数是algorithm库下的一个函数,sort函数是不稳定的,即大小相同的元素在排序后相对顺序可能发生改变...2022-08-18
  • C++万能库头文件在vs中的安装步骤(图文)

    这篇文章主要介绍了C++万能库头文件在vs中的安装步骤(图文),文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧...2021-02-23
  • vue接口请求加密实例

    这篇文章主要介绍了vue接口请求加密实例,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2020-08-12
  • AES加密解密的例子小结

    关于AES加密的算法我们就不说了,这里主要给各位演示了三个关于AES算法实现的加密例子,希望本文章能给你带来帮助。 话不多说,先放上代码,一共有两个文件:AES.php(aes算...2016-11-25
  • node.JS md5加密中文与php结果不一致怎么办

    这次文章要给大家介绍的是node.JS md5加密中文与php结果不一致怎么办,不知道具体解决办法的下面跟小编一起来看看。 因项目需要,需要Node.js与PHP做接口调用,发现nod...2017-07-06
  • 详解C++ bitset用法

    这篇文章主要介绍了C++ bitset用法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧...2020-04-25
  • 浅谈C++中的string 类型占几个字节

    本篇文章小编并不是为大家讲解string类型的用法,而是讲解我个人比较好奇的问题,就是string 类型占几个字节...2020-04-25
  • PHP加密解密函数详解

    分享一个PHP加密解密的函数,此函数实现了对部分变量值的加密的功能。 加密代码如下: /* *功能:对字符串进行加密处理 *参数一:需要加密的内容 *参数二:密钥 */ function passport_encrypt($str,$key){ //加密函数 srand(...2015-10-30
  • php威盾解密的例子分享

    下面来给大家分享两个关于php威盾解密的例子,一个是批量解密一个是超级算法的解密都非常的好,大家有举的进入参考。 例子,批量解密 代码如下 复制代码 ...2016-11-25
  • NODE.JS加密模块CRYPTO常用方法介绍

    使用require('crypto')调用加密模块。加密模块需要底层系统提供OpenSSL的支持。它提供了一种安全凭证的封装方式,可以用于HTTPS安全网络以及普通HTTP连接。该模块还提供了一套针对OpenSSL的hash(哈希),hmac(密钥哈希),cipher...2014-06-07
  • C++ Eigen库计算矩阵特征值及特征向量

    这篇文章主要为大家详细介绍了C++ Eigen库计算矩阵特征值及特征向量,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...2020-04-25
  • C++ pair的用法实例详解

    这篇文章主要介绍了C++ pair的用法实例详解的相关资料,需要的朋友可以参考下...2020-04-25
  • VSCode C++多文件编译的简单使用方法

    这篇文章主要介绍了VSCode C++多文件编译的简单使用方法,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下...2021-03-29