NSCTF-web200
知识点一:substr()
函数返回字符串的一部分。语法:substr(string,start,length)
substr($_o,$_0,1)即将$_o从$_0开始剪切,减去一个字符,然后输出减的这个字符。$_0是从0开始,所以我们从头开始减。
所以$_c就是将$str最后一个字符减去,然后输出它。我们假设这个字符为X
知识点二:ord()将字符串的第一个字符变为ASCII码。
$_ _是将字符X的ASCII码(一个数字)加1.
知识点三:chr(),与ord()相反,它将ASCII码返回为字符。
知识点四:strlen(),返回字符串的长度。
问题一:***$_***是多少?详见步骤一。
这就需要解密key密文,题目先base64编码再反转再凯撒加密,所以我们倒着解密。
问题二:$_o即$str的字符串长度到底是多少位?详细见步骤二。
分析:这个for循环,是$_0从0开始,每次循环加1,当循环的数字不小于”$_o的长度”时,就输出。
而$_o是将$str反转一下,不会改变字符串长度。
反转完了之后,我们剪切一个字符下来,ASCII码和字符换来换去的。
于是又赋值给$_c, 最后让输出的$_末尾加上$_c这个值。
$_是循环45次的$_c拼起来的,而$_c是每次截取$_o的第一位,也就是$str的最后一位。
假设$str为abcd, $_o为dcba,
$_c依次截取d,c,b,a;将它们变为ASCII码然后减一再变为字符串
所以$_要转换为ASCII码
::: {.image-package}
\
::: {.image-caption}
:::
:::
步骤一,求for循环结束后,还未加密的$_值。
::: {.image-package}
\
::: {.image-caption}
:::
:::
::: {.image-package}
\
::: {.image-caption}
:::
:::
::: {.image-package}
\
::: {.image-caption}
:::
:::
::: {.image-package}
\
::: {.image-caption}
:::
:::
::: {.image-package}
\
::: {.image-caption}
:::
:::
所以$_=~88:36e1bg8438e41757d:29cgeb6e48c`GUDTO|;hbmg
步骤二:
::: {.image-package}
\
::: {.image-caption}
:::
:::
php脚本尝试了很多,但还是欠缺了,不能做到想要的效果。
就这样吧。20161127
:::
:::
:::