[PHP][位转换积累]之异或运算的简单加密应用

异或的符号是^。按位异或运算, 对等长二进制模式按位或二进制数的每一位执行逻辑按位异或操作. 操作的结果是如果某位不同则该位为1, 否则该位为0.

xor运算的逆运算是它本身,也就是说两次异或同一个数最后结果不变,即(a xor b) xor b = a。xor运算可以用于简单的加密,比如我想对我MM说1314520,但怕别人知道,于是双方约定拿我的生日19880516作为密钥。1314520 xor 19880516 = 20665500,我就把20665500告诉MM。MM再次计算20665500 xor 19880516的值,得到1314520,于是她就明白了我的企图。

相同位不同则为1,相同则为0。

00101

11100

(^或者xor)

----------------

11001

运算结果

x <- x # y

y <- x @ y

x <- x @ y

执行了第一句后x变成了x # y。那么第二句实质就是y <- x # y @ y,由于#和@互为逆运算,那么此时的y变成了原来的x。第三句中x实际上被赋值为(x # y) @ x,如果#运算具有交换律,那么赋值后x就变成最初的y了。这三句话的结果是,x和y的位置互换了。

通过这个原理运用PHP可实现简单高效的加密

function mycrypt( $str, $key ){
	$slen = strlen( $str );
	$klen = strlen( $key );
	$cipher = ‘‘;
	for ($i=0;$i<$slen;$i=$i+$klen) {
		$cipher .= substr( $str, $i, $klen )^$key;
	}
	return $cipher;
}

接收端实现简单的解密

function myuncrypt( $str, $key ){
	$slen = strlen( $str );
	$klen = strlen( $key );
	$plain = ‘‘;
	for ($i=0;$i<$slen;$i=$i+$klen) {
		$plain .= $key^substr( $str, $i, $klen );
	}
	return $plain;
}
时间: 2024-12-15 02:00:04

[PHP][位转换积累]之异或运算的简单加密应用的相关文章

[PHP][位转换积累]之与运算截取二进制流的值

function getBit( $num, $bit, $mask ){ return $num>>$bit&$mask; } var_dump( getBit( 41, 3, 7 ) ); var_dump( getBit( 0x29, 0x0, 0xf ) ); //十六进制表示法同样适用 此函数适合大端序的二进制流 取十进制数$num的第$bit位起至$mask位,返回值是十进制数 原理,把$num左移动至$bit位,然后跟$mask相与,得到的就是掩码掩住的几位二进制数,例如

[PHP][位转换积累]之pack和unpack

http://my.oschina.net/goal/blog/195749?fromerr=pryT221q <?php $hex = unpack('H*','as'); var_dump( $hex ); var_dump( hexdec($hex[1]) ); var_dump( base_convert ( $hex[1] , 16 , 2 ) ); $bin = pack("a*", "da"); echo "output: "

异或运算的性质及用途

 1.两个数的交换  利用异或运算可以实习一种简单的不使用第三个数的交换方式, 代码如下所示: void swap(int a,int b) { a = a^b; b = a^b; a = a^b; }  原因是:异或运算是它本身的逆运算,故对于两个数或是布尔变量有如下性质: (a XOR b) XOR b = a 补充,异或运算的简单性质: 1. a ⊕ a = 0 2. a ⊕ b = b ⊕ a // 异或运算满足交换律 3. a ⊕ b ⊕ c = a ⊕ (b ⊕ c) = (a ⊕

位运算之异或运算

位运算 位运算就是基于整数的二进制表示进行的运算.理解位运算首先要理解二进制.位运算总共只有5种运算:与(&).或(|).异或(^).左移(<<).右移(>>). 异或运算 维基百科中对「异或」的解释: 在逻辑学中,逻辑算符异或(exclusive or)是对两个运算元的一种逻辑析取类型,符号为 XOR 或 EOR 或 ⊕(编程语言中常用^).但与一般的逻辑或不同,异或算符的值为真仅当两个运算元中恰有一个的值为真,而另外一个的值为非真.转化为命题,就是:"两者的值

备忘“与”、“非”、“或”、“异或” 运算

位运算符主要针对二进制,它包括了:"与"."非"."或"."异或".从表面上看似乎有点像逻辑运算符,但逻辑运算符是针对两个关系运算符来进行逻辑运算,而位运算符主要针对两个二进制数的位进行逻辑运算.下面详细介绍每个位运算符. 1.与运算符与运算符用符号"&"表示,其使用规律如下:两个操作数中位都为1,结果才为1,否则结果为0,例如下面的程序段.public class data13{public st

异或运算的应用

异或是一种基于二进制的位运算,用符号XOR或者 ^ 表示, 其运算法则是对运算符两侧数的每一个二进制位,同值取0,异值取1. 它与布尔运算的区别在于,当运算符两侧均为1时,布尔运算的结果为1,异或运算的结果为0. 异或的性质 交换律:a ^ b = b ^ a 结合律:a ^ b ^ c = a ^ (b ^ c) = (a ^ b) ^ c d = a ^ b ^ c 可以推出 a = d ^ b ^ c 自反性:a ^ b ^ a = b x ^ x = 0, x ^ 0 = x 应用: 1

xor异或逻辑运算

简略记忆:同0异1 1.由于0^0=0 0^1=1 所以,0^任何数 = 任何数 2.由于1^0=1 1^1 =0所以,1^任何数 = 任何数取反 3.任何数^任何数 = 0; 4.用于将特定的位反转,如对10100001的第2位和第3位翻转,可以将数与00000110进行按位异或运算.原因见(2) 5.通过按位异或运算,可以实现两个值的交换,而不必使用临时变量. 例如 a= 10100001 b= 00000111 a=a^b; //a=10100110 //此步操作是将a b原值的相同位记录

异或运算

将a与b的对应位进行异或运算,同为0或者同为1时,对应位结果为0:否则为1.

bzoj4103【THUSC2015】异或运算

4103: [Thu Summer Camp 2015]异或运算 Time Limit: 20 Sec  Memory Limit: 512 MB Submit: 359  Solved: 188 [Submit][Status][Discuss] Description 给定长度为n的数列X={x1,x2,...,xn}和长度为m的数列Y={y1,y2,...,ym},令矩阵A中第i行第j列的值Aij=xi xor  yj,每次询问给定矩形区域i∈[u,d],j∈[l,r],找出第k大的Aij