$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)); 

解决方案 »

  1.   

    $ctr = $ctr == strlen($encrypt_key) ? 0 : $ctr; 
    三元运算
    当 $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 指向下一个位置
      

  2.   

    $encrypt_key是怎么和$ctr扯上关系的?为什么$是 encrypt_key 的第 $ctr 个元素
      

  3.   

    $encrypt_key = md5(rand(0, 32000));
    那么 $encrypt_key 就是一个由32个字符组成的串
    于是 $encrypt_key 就有第0个、第1个、第2个...字符
    $ctr 就代表了那些 0、1、2、3、....
      

  4.   


    经过测试确实是如此,但是还是不明白
    $encrypt_key 既没有赋值给$ctr 也没有做别的什么 $ctr怎么会和他有相同的值
    难道是for语句的功劳,是怎么实现的?
      

  5.   

    对于字符串 abcdefg
    那么
    第0字符个是 a
    第1个字符是 b
    第2字符个是 c
    这个总能理解的吧?