$ctr = $ctr == strlen($encrypt_key) ? 0 : $ctr;
这句话会按照怎么样的运算顺序去运行?按照手册 依次是 () = == ? :
但是总感觉不对,还请前辈指教
$tmp .= $encrypt_key[$ctr].($txt[$i] ^ $encrypt_key[$ctr++]);
这句话和上面的是一句,堵在for语句里面
$encrypt_key[$ctr]为何可以这样写?
完整代码如下,是php的加密解密函数function passport_encrypt($txt, $key) {
srand((double)microtime() * 1000000);
$encrypt_key = md5(rand(0, 32000));
$ctr = 0;
$tmp = '';
for($i = 0;$i < strlen($txt); $i++) {
$ctr = $ctr == strlen($encrypt_key) ? 0 : $ctr;
$tmp .= $encrypt_key[$ctr].($txt[$i] ^ $encrypt_key[$ctr++]);
}
return base64_encode(passport_key($tmp, $key));
}
这句话会按照怎么样的运算顺序去运行?按照手册 依次是 () = == ? :
但是总感觉不对,还请前辈指教
$tmp .= $encrypt_key[$ctr].($txt[$i] ^ $encrypt_key[$ctr++]);
这句话和上面的是一句,堵在for语句里面
$encrypt_key[$ctr]为何可以这样写?
完整代码如下,是php的加密解密函数function passport_encrypt($txt, $key) {
srand((double)microtime() * 1000000);
$encrypt_key = md5(rand(0, 32000));
$ctr = 0;
$tmp = '';
for($i = 0;$i < strlen($txt); $i++) {
$ctr = $ctr == strlen($encrypt_key) ? 0 : $ctr;
$tmp .= $encrypt_key[$ctr].($txt[$i] ^ $encrypt_key[$ctr++]);
}
return base64_encode(passport_key($tmp, $key));
}
三元运算
当 $encrypt_key 的长度等于 $ctr 时返回 0,否则返回 $ctr$tmp .= $encrypt_key[$ctr].($txt[$i] ^ $encrypt_key[$ctr++]);
$encrypt_key 的第 $ctr 个元素 与 $txt[$i] ^ $encrypt_key[$ctr++] 的结果连接成串
$encrypt_key[$ctr++] 的值取出后 $ctr 指向下一个位置
那么 $encrypt_key 就是一个由32个字符组成的串
于是 $encrypt_key 就有第0个、第1个、第2个...字符
$ctr 就代表了那些 0、1、2、3、....
经过测试确实是如此,但是还是不明白
$encrypt_key 既没有赋值给$ctr 也没有做别的什么 $ctr怎么会和他有相同的值
难道是for语句的功劳,是怎么实现的?
那么
第0字符个是 a
第1个字符是 b
第2字符个是 c
这个总能理解的吧?