$str="abcdefg";
$key='Z';
$str ^= $key;
$str ^= $key;
echo $str;//结果为a$str是个变量,长度是可变的

解决方案 »

  1.   

    你得循环
    for ($i = 0; $i < strlen($str); $i ++)
    {
        $str[$i] ^= $key[0];
    }
      

  2.   

    异或是按位与,数目不一样的话,后面的相当于与NULL异或。
    <?php
    $str="abcdefg";
    $key='Z      ';
    $str ^= $key;
    $str ^= $key;
    echo $str;//结果为abcdegf
    echo "<br>";
    $str="abcdefg";
    $key='ZABCDER';
    $str ^= $key;
    $str ^= $key;
    echo $str;//结果为abcdegf
    echo "<br>";$str="abcdefg";
    $key='Z'.NULL.NULL.NULL.NULL.NULL.NULL;
    $str ^= $key;
    $str ^= $key;
    echo $str;//a
      

  3.   

    Fatal error: Cannot use assign-op operators with overloaded objects nor string offsets in F:\CoreSec\CS\interface\index.php on line 11
      

  4.   

    呵呵,我明白位数相等时可以成功,但是$str长度是变的(字符由java加密的,我需要解密),我总不能在key后面动态加NULL吧
      

  5.   

    for ($i = 0; $i < strlen($str); $i ++)
    {
      $str[$i] = $str[$i] ^ $key[0];
    }
    这样呢
      

  6.   


    不确定数字的话,可以循环异或。
    for ($i = 0; $i < strlen($str); $i ++){
      $str{$i} = $str{$i} ^ "Z";
    }
      

  7.   

    看你描述像是简单异或,应该类似以下解密。
    $i = 0;
    $l = strlen($key);
    while(isset($str{$i}))
    {
           $str{$i} ^= $key[$i % $l];
           $i++;
    }
      

  8.   

    你俩都对了,谁给我解释一下为什么做在这个小问题上//郁闷,C++ Java都支持,难道PHP支持不好
    刚刚的如果改为:
    $str{$i} ^= 'a';这样就行,这在c++和java 都是合法的
    但我用PHP测试了一下
    $a=5;
    $b=10;
    echo $a+=$b;//15 靠,又好使了为什么(1)
    另外$str[1]与$str{1}有什么区别 (2)
    准备结贴
      

  9.   


    对于数组  $arr[$i] 表示数组的第$i个元素
    对于字符串,$arr{$i}指的是字符串的第$i个字符。
      

  10.   

    就是你啦,你有机会试一下$a ^= $b 不等于 $a = $a^$b;呵呵但是+=是可以的
      

  11.   

    我可以很负责人的告诉你结果是一样的<?php
    //案例1
    $a='aa';
    $b='bb';
    echo $a=$a^$b;
    echo $a=$a^$b;echo "<br>";
    //案例2
    $a='aa';
    $b='bb';
    echo $a^=$b;
    echo $a^=$b;
    ?>
      

  12.   

    $str="hello world!";
    for ($i = 0; $i < strlen($str); $i ++)
    {
    $str[$i] ^= 'Z';//你再改成$str[$i] = $str[$i]^'Z';
    }
    echo $str;
    你测试下这个试试