二进制运算小结

来源:互联网 发布:linux 修改profile 编辑:程序博客网 时间:2024/04/30 18:04

最近在看密码学的书籍,对二进制运算提起了兴趣,今晚总结了一下感觉别有所获.

A,B两个数进行位运算,情况如下:

A

 

 

B

0

1

异或

异或

0

0

0

0

1

0

1

1

1

0

1

1

1

0

由上表总结一下两个比特流AB二进制运算的规律:

       A|B,B比特位为1的位置对应的A处比特用1代替,其余比特不变;

A&B,B比特位为0的位置对应A处比特用0代替,其余比特不变;

A^B,B比特位为1的位置对应A处比特取反,其余比特不变;

显然AB交换顺序不影响运算结果,但三种运算之间顺序不能交换.

如果把AB之间的运算看作数据的加密,那么或和与操作都损失了一部分信息,是不可恢复的(因为原文A中一些比特被覆盖了).而且”与”和”或”丢失的那部分信息正好可以互补,也就是

       A|B+A&B-B=A

这可以用来设计加密算法,计算A|B+A&B的值作为密文C,而B作为密钥K,解密时用C-K即可获得明文A.由于B是随机的,所以算法也是安全的.异或则是可逆的,所以最常用来加密信息.因为异或只是反转了明文中的某些比特位而已,要想恢复A则只需异或两次即可

       A^B^B=A

       A^0=A

       A^0xFF=~A(假设A为单字节)

另外偶数个1异或为0,奇数个1异或为1,0比特对异或运算是透明的

 

 

       

0 0
原创粉丝点击