首页 > 编程 > C++ > 正文

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

2020-05-23 14:17:08
字体:
来源:转载
供稿:网友

这篇文章主要介绍了C++加密解密php代码的方法,实例分析了基于C++实现加密解密的相关技巧,具有一定参考借鉴价值,需要的朋友可以参考下

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

 

 
  1. #include "php.h" 
  2. #include "php_ini.h" 
  3. #include "ext/standard/info.h" 
  4. #include "string.h" 
  5. char * key = "abcd"
  6. PHP_FUNCTION(encode){ 
  7. long key_len = strlen(key); 
  8. char * code, * encode_code; 
  9. long code_len; 
  10. if(zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s", &code, &code_len) == FAILURE){ 
  11. return
  12. encode_code = encode(code, code_len, key, key_len); 
  13. RETURN_STRING(encode_code, 0); 
  14. PHP_FUNCTION(decode){ 
  15. long key_len = strlen(key); 
  16. char * code, * decode_code; 
  17. long code_len; 
  18. if(zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s", &code, &code_len) == FAILURE){ 
  19. return
  20. decode_code = decode(code, code_len, key, key_len); 
  21. RETURN_STRING(decode_code, 0); 
  22. PHP_FUNCTION(run){ 
  23. char * en_base64_code; 
  24. long en_base64_code_len; 
  25. char * decode_code; 
  26. long key_len = strlen(key); 
  27. char * eval_code; 
  28. char * str_name; 
  29. if(zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s", &en_base64_code, &en_base64_code_len) == FAILURE){ 
  30. return
  31. str_name = zend_make_compiled_string_description("phpencoder" TSRMLS_CC); 
  32. decode_code = decode(en_base64_code, en_base64_code_len, key, key_len); //解码 
  33. spprintf(&eval_code, 0, " ?>%s<?php ", decode_code); 
  34. free(decode_code); 
  35. if(zend_eval_string(eval_code, NULL, str_name TSRMLS_CC) == FAILURE){ //解析失败 
  36. efree(str_name); 
  37. efree(eval_code); 
  38. php_error_docref(NULL TSRMLS_CC, E_RECOVERABLE_ERROR, "Please make sure '<?php' end with '?>'", PHP_EOL); 
  39. RETURN_FALSE; 
  40. efree(str_name); 
  41. efree(eval_code); 
  42. RETURN_TRUE; 
  43. inline char * encode(char * code, long code_len, char* key, long key_len){ 
  44. char * code_encode; 
  45. int i; 
  46. long offset = 0, ret_len; 
  47. code_encode = strdup(code); 
  48. for(i =0; i<code_len; i++){ 
  49. if(offset == key_len){ 
  50. offset = 0; 
  51. * (code_encode + i) = * (code + i) ^ * (key + offset); 
  52. offset ++; 
  53. return php_base64_encode(code_encode, code_len, &ret_len); //base64 加密 
  54. inline char * decode(char * code,long code_len, char* key, long key_len){ 
  55. char * code_decode; 
  56. char * nobase_code; 
  57. int i; 
  58. long offset = 0, ret_len; 
  59. zend_bool strict = 0; 
  60. code_decode = strdup(code); 
  61. nobase_code = php_base64_decode_ex((unsigned char*)code, code_len, &ret_len, strict); //解密,ret_len 返回长度 
  62. for(i =0; i<ret_len; i++){ 
  63. if(offset == key_len){ 
  64. offset = 0; 
  65. * (code_decode + i) = * (nobase_code + i) ^ * (key + offset); 
  66. offset ++; 
  67. * (code_decode + i) = '/0'
  68. return code_decode; 

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

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表