把文件下载并解压得到一个给字符串加密的PHP
1 <?php 2 function encrypt($data,$key) 3 { 4 $key = md5('ISCC'); 5 $x = 0; 6 $len = strlen($data); 7 $klen = strlen($key); 8 for ($i=0; $i < $len; $i++) { 9 if ($x == $klen) 10 { 11 $x = 0; 12 } 13 $char .= $key[$x]; 14 $x+=1; 15 } 16 for ($i=0; $i < $len; $i++) { 17 $str .= chr((ord($data[$i]) + ord($char[$i])) % 128); 18 } 19 return base64_encode($str); 20 } 21 ?>
代码意思大概是传入一个flag作为参数赋值给data变量得到得到了上面给出的字符串:fR4aHWwuFCYYVydFRxMqHhhCKBseH1dbFygrRxIWJ1UYFhotFjA=
由此我们只要根据 encrypt 函数写对应的 decrypt函数,刚入门,不会写,啊啊哈哈,参考一下大佬的,转载于https://www.cnblogs.com/huangming-zzz/
1 <?php 2 function decrypt($str) { 3 $mkey = "729623334f0aa2784a1599fd374c120d"; 4 $klen = strlen($mkey); 5 $tmp = $str; 6 $tmp = base64_decode($tmp); // 对 base64 后的字符串 decode 7 $md_len = strlen($tmp); //获取字符串长度 8 $x = 0; 9 $char = ""; 10 for($i=0;$i < $md_len;$i++) { // 取二次加密用 key; 11 if ($x == $klen) // 数据长度是否超过 key 长度检测 12 $x = 0; 13 $char .= $mkey[$x]; // 从 key 中取二次加密用 key 14 $x+=1; 15 } 16 $md_data = array(); 17 for($i=0;$i<$md_len;$i++) { // 取偏移后密文数据 18 array_push($md_data, ord($tmp[$i])); 19 } 20 $md_data_source = array(); 21 $data1 = ""; 22 $data2 = ""; 23 foreach ($md_data as $key => $value) { // 对偏移后的密文数据进行还原 24 $i = $key; 25 if($i >= strlen($mkey)) {$i = $i - strlen($mkey);} 26 $dd = $value; 27 $od = ord($mkey[$i]); 28 array_push($md_data_source,$dd); 29 $data1 .= chr(($dd+128)-$od); // 第一种可能, 余数+128-key 为回归数 30 $data2 .= chr($dd-$od); // 第二种可能, 余数直接-key 为回归数 31 } 32 print "data1 => ".$data1."<br>\n"; 33 print "data2 => ".$data2."<br>\n"; 34 } 35 $str = "fR4aHWwuFCYYVydFRxMqHhhCKBseH1dbFygrRxIWJ1UYFhotFjA="; 36 decrypt($str); 37 ?>
运行结果:
Flag:{asdqwdfasfdawfefqwdqwdadwqadawd}