1. 程式人生 > >異或運算的簡單加解密應用

異或運算的簡單加解密應用

xor運算的逆運算是它本身,也就是說兩次異或同一個數最後結果不變,即(a xor b) xor b = a。xor運算可以用於簡單的加密,比如我想對我MM說1314520,但怕別人知道,於是雙方約定拿我的生日19880516作為金鑰。1314520 xor 19880516 = 20665500,我就把20665500告訴MM。MM再次計算20665500 xor 19880516的值,得到1314520,於是她就明白了我的企圖。

異或的定義:相同位不同則為1,相同則為0。

值A:   00101

運算: ^

值B:   11100

結果X: 11001 

運算: ^

值B:   11100

結果Y: 00101

//值A通過兩次與同一個值B進行異或運算 得出的結果是其自身
//拆開來看就是 值A與0(值B^值B=0)做異或運算

通過這個原理運用PHP可實現簡單高效的加密

//加密解密都呼叫此方法 不同是是$str即可以是加密字元也可以是解密字元
function xorencrypt( $str, $key ){
    $slen = strlen( $str );
    $klen = strlen( $key );
    $cipher = '';
    for ($i=0;$i<$slen;$i=$i+$klen) {
        $cipher .= substr( $str, $i, $klen )^$key;//key如果短於字串會有bug 所以做多次擷取
    }
    return $cipher;
}

交換兩個整數 如何在不引入第三個變數的前提下對變數$a與$b進行互換

    $a = '123';
    $b = '456';
    echo $a,'_',$b,'<br/>';
    $a = $a^$b;
    $b = $b^$a;
    $a = $a^$b;
    echo $a,'_',$b,'<br/>';

所有這些都有一個大前提就是key的長度一定要大於等於字串的長度