智能摘要 AI
本文描述了作者在审核过程中遇到的一个复杂密码问题,并决定通过编写Python和PHP代码来解决。作者使用Python的`subprocess`库调用PHP代码,实现密码的加密和解密功能。PHP代码通过MD5哈希生成密钥,并利用凯撒加密算法对字符串进行处理。Python部分则定义了一个函数`encrypt`,通过调用PHP脚本完成加密操作。此外,强调了在运行Python代码前需确保本地安装PHP环境或指定PHP的绝对路径。
我在审核的时候,遇到了一个密码,我看的头昏脑涨,根本看不懂密码的原理,但我必须要编写一个密码和密码的程序。
如果是这样的话,那么就必须使用 python的 ubprocess库,它能很好地调用 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-function.php ' + string + " " + operation)
return (a.decode('utf-8'))
print(encrypt('160794','E'))PHP环境必须在本地安装和环境变量,否则必须将 php绝对路径添加到run_cmd(php)之前。





评论 (0)