• [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 xorencrypt( $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 xordecrypt( $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;
    }
    
  • 相关阅读:
    Struts2项目问题及解决方式
    CSS样式编写案例
    第二个项目总结
    CSS布局中的问题解决方式
    CSS3中的Flexbox弹性布局(二)
    CSS3中的Flexbox弹性布局(一)
    python----递归函数
    python----函数进阶
    python----函数
    python----装饰器
  • 原文地址:https://www.cnblogs.com/yiyide266/p/5576784.html
Copyright © 2020-2023  润新知