如何利用Python执行PHP代码插图

我在审核的时候,遇到了一个密码,我看的头昏脑涨,根本看不懂密码的原理,但我必须要编写一个密码和密码的程序。

如果是这样的话,那么就必须使用 python的 ubprocess库,它能很好地调用 php代码:

如何利用Python执行PHP代码插图1

php代码

<?php
 
//$argv[1] 获取参数值
$string = $argv[1];
$operation = $argv[2];
 
function encrypt($string,$operation,$key='xyb8888'){ 
    $key=md5($key); 
    $key_length=strlen($key); 
      $string=$operation=='D'?base64_decode($string):substr(md5($string.$key),0,8).$string; 
    $string_length=strlen($string); 
    $rndkey=$box=array(); 
    $result=''; 
    for($i=0;$i<=255;$i++){ 
           $rndkey[$i]=ord($key[$i%$key_length]); 
        $box[$i]=$i; 
    } 
    for($j=$i=0;$i<256;$i++){ 
        $j=($j+$box[$i]+$rndkey[$i])%256; 
        $tmp=$box[$i]; 
        $box[$i]=$box[$j]; 
        $box[$j]=$tmp; 
    } 
    for($a=$j=$i=0;$i<$string_length;$i++){ 
        $a=($a+1)%256; 
        $j=($j+$box[$a])%256; 
        $tmp=$box[$a]; 
        $box[$a]=$box[$j]; 
        $box[$j]=$tmp; 
        $result.=chr(ord($string[$i])^($box[($box[$a]+$box[$j])%256])); 
    } 
    if($operation=='D'){ 
        if(substr($result,0,8)==substr(md5(substr($result,8).$key),0,8)){ 
            return substr($result,8); 
        }else{ 
            return''; 
        } 
    }else{ 
        return str_replace('=','',base64_encode($result)); 
    } 
}
 
$e_keyid = encrypt($string,$operation);
$e_keyid = str_replace('/','AAABBB',$e_keyid);
echo $e_keyid;
?>

python代码

import subprocess
 
#执行CMD命令
def run_cmd(cmd):
    p = subprocess.Popen(cmd, shell=True, stdout=subprocess.PIPE)
    stdout, stderr = p.communicate()
    if stdout:
        stdout = stdout.rstrip()
    if stderr:
        stderr = stderr.rstrip()
    return (stdout, stderr, p.returncode)
 
#加密解密函数
def encrypt(string,operation):
    a,b,c = run_cmd('php D:/Desktop/Python/systemlogined-function.php ' + string + " " + operation)
    return (a.decode('utf-8'))
 
print(encrypt('160794','E'))

PHP环境必须在本地安装和环境变量,否则必须将 php绝对路径添加到run_cmd(php)之前。