基于异或(^)运算进行数值交换的可行性分析

基于异或运算可以不用牺牲空间就完成两个变量数值交换的操作。而在编程实践中一般都会用到第三空间来保存变量,使变量在交换过程中不至于数值改变,在此统称之为信息丢失。

为什么异或运算可以不借用第三空间但不造成信息丢失呢?

这里涉及到异或运算的一个良好性质,在表述这个性质之前我们先看一个几何上的例子。

设现有二维空间中两向量A,B。为表示方便令A为X轴正方向上的向量,B为Y轴正方向上的向量。现在我们可以利用A,B两向量的向量运算很容易就得到第三个向量C,即C = A + B;这里的向量C显然是位于第一象限中的向量。至此存在三个向量,ABC,而如果ABC中任一向量信息的丢失,则可以通过另两向量进行还原。现在你应该这个例子中所透露出来的性质。

这里的异或运算同样也是跟上述例子一样。

即C=A^B;

A=C^B;

B=C^A;

正是异或运算这一良好的性质也成为了密码学的密码编码中一个最基本的运算。

现有明文P,密钥K,我们可以通过P,K经过一系列的运算过程(置换,变换,移位,异或运算)生成密文C。

对于置换,变换,移位这种类型的运算可以通过它们的逆运算进行还原,而异或运算亦可以通过上述性质进行还原,这就使得通过密钥K,密文C生成明文P成为可能。

即:C=P^K;

=》P=C^K;

注:在此提到的异或运算在密码学中的应用只是为了说明一下异或运算性质的应用环境,而真正的密码学中编码过程远比上述要复杂。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值