在审计的时候遇到某个加密函数,看的我头晕眼花的,完全看不明白加密过程,但是我又需要写加密解密工具...
遇到这种情况就需要用到 python 的 subprocess 库了,他可以完美的调用 php 代码:
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-php函数.php ' + string + " " + operation) return (a.decode('utf-8')) print(encrypt('160794','E'))
需要本地安装了 PHP 环境,并且设置了环境变量,如果没设置的话就需要在 run_cmd('php) 的前面添加php绝对路径
本文作者为Mr.Wu,转载请注明,尊守博主劳动成果!
由于经常折腾代码,可能会导致个别文章内容显示错位或者别的 BUG 影响阅读; 如发现请在该文章下留言告知于我,thank you !