如何将解码后的嵌套PHP代码重新编码回原格式?
嵌套PHP编码无法还原的问题解决方法
先拆解原解码流程(从内到外执行):
$code → strrev() → base64_decode() → gzuncompress() → gzinflate() → gzuncompress() → gzinflate() → gzuncompress() → gzinflate() → gzuncompress() → gzinflate() → str_rot13()
你的编码代码存在三个核心问题:
- strrev()未传入目标内容:你写的
strrev()是空调用,必须传入要处理的原始字符串 - 压缩函数顺序颠倒:解码时是先
gzuncompress再gzinflate,逆过程要先执行gzinflate的反向操作gzdeflate,再执行gzuncompress的反向操作gzcompress,你搞反了两者顺序 - 步骤逻辑不符合逆流程:编码需要完全反向解码的执行顺序,不能直接照搬解码的函数嵌套顺序
正确的编码代码(假设原始内容存储在$original变量中):
$code = strrev( base64_encode( gzcompress(gzdeflate( gzcompress(gzdeflate( gzcompress(gzdeflate( gzcompress(gzdeflate( str_rot13($original) )) )) )) )) ) );
关键逻辑验证:
- 原始内容先执行
str_rot13(该算法是自逆的,解码最后一步用它,编码第一步也用它) - 四次循环执行
gzdeflate→gzcompress,完全对应解码时gzuncompress→gzinflate的逆过程 - 最后执行
base64_encode→strrev,对应解码时strrev→base64_decode的逆过程
注意:gzcompress/gzuncompress处理zlib格式数据,gzdeflate/gzinflate处理deflate格式数据,两者的嵌套顺序必须严格对应逆流程,否则无法正确还原。
内容的提问来源于stack exchange,提问作者Jos Kue
相关产品推荐
相关产品推荐

