異或運算的簡單加解密應用
阿新 • • 發佈:2018-12-21
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的長度一定要大於等於字串的長度