$_o=strrev($str);
将输入字符串 $str
反转。例如,如果输入是 "abc",那么 $_o
将是 "cba"。
for($_0=0;$_0<strlen($_o);
$_0++){ $_c=substr($_o,$_0,1);
$__=ord($_c)+1;
$_c=chr($__);
$_=$_.$_c; }
这段代码遍历反转后的字符串 $_o
的每个字符。
对每个字符的 ASCII 值加 1
,然后将其转换回字符,并将结果拼接到字符串 $_
中。
return str_rot13(strrev(base64_encode($_)));
先将字符拼接的结果进行 Base64 编码,然后反转这个字符串,再应用 ROT13 编码。
ROT13 是一种简单的加密方式,它将每个字母替换为其后 13 位的字母。非字母字符保持不变。
根据它的注释要解密
为了得到 flag,我们需要逆向 encode
函数的操作。以下是解密的步骤:
- 反向 ROT13。
- 反转字符串。
- Base64 解码。
- 字符逐个减 1(与加 1 相反)。
写一个php
<?php
$miwen="a1zLbgQsCESEIqRLwuQAyMwLyq2L5VwBxqGA3RQAyumZ0tmMvSGM2ZwB4tws";
function decode($str){
// 反向 ROT13
//反向 ROT13 的过程实际上就是再次进行 ROT13 加密,
//因为 ROT13 的特性是对字母进行 13 位替换,相当于将字母表分为两部分。
//对于每个字母,经过一次 ROT13 编码后,再次进行 ROT13 编码会将它还原为原来的字母。
$str = str_rot13($str);
$str=strrev($str);
$str=base64_decode($str);
//初始化-->空字符
$result = '';
for ($i = 0; $i < strlen($str); $i++) {
$char = substr($str, $i, 1);
// ASCII 值减 1
$result .= chr(ord($char) - 1);
}
return $result;
}
$flag = strrev(decode($miwen));
echo $flag;
?>
for ($i = 0; $i < strlen($str); $i++)
:
- 这是一个
for
循环,用于遍历字符串$str
的每个字符。 strlen($str)
函数返回字符串$str
的长度(即字符的数量)。$i
从 0 开始,每次迭代加 1,直到$i
小于字符串的长度。这意味着循环会执行$str
中每个字符的索引。
$char = substr($str, $i, 1);
substr($str, $i, 1)
函数用于从字符串$str
中提取子字符串。- 第一个参数是要处理的字符串
$str
。 - 第二个参数
$i
是起始位置的索引,从 0 开始,即第一个字符的位置。 - 第三个参数
1
指定要提取的字符数,这里是 1 个字符。 - 这个函数的结果会将当前索引
$i
位置的字符赋值给变量$char
。
$result .= chr(ord($char) - 1);
-
ord($char)
:ord()
函数用于获取字符$char
的 ASCII 值。例如,ord('A')
返回 65,ord('a')
返回 97。
-
ord($char) - 1
:- 这个表达式将字符
$char
的 ASCII 值减去 1。例如,如果$char
是'A'
(ASCII 值为 65),那么这个表达式的结果是 64,对应的字符是'@'
。
- 这个表达式将字符
-
chr(...)
:chr()
函数用于将给定的 ASCII 值转换为对应的字符。例如,chr(64)
返回'@'
。
-
$result .= ...
:.
是 PHP 中的字符串连接运算符。$result .= ...
表示将右侧的内容追加到$result
的末尾。如果$result
之前是一个空字符串,那么这个操作就会将第一个字符添加到$result
中。
和之前的方式一样(反序列化unserialize 及实例)放到phpstudy的WWW目录下浏览器打开
OKK