验证循环异或的可行性
加密:
例如,(p1、p2、p3、p4)
每一个都是与前一个异或的结果异或:
新值
(0、p2⊕p1、p3⊕(p2⊕p1)、p4⊕(p3⊕(p2⊕p1))
第一个值是p1与最后一个的值异或
(p4⊕p3⊕p2、p2⊕p1、p3⊕(p2⊕p1)、p4⊕(p3⊕(p2⊕p1))
标记为
(c1,c2,c3,c4)
解密:
(d1,d2,d3,d4)
第一步先计算:
c2⊕c3==(p2⊕p1)⊕ (p3⊕(p2⊕p1))=p3———d3
c3⊕c4==(p3⊕(p2⊕p1))⊕ (p4⊕(p3⊕(p2⊕p1))=p4————-d4
c1⊕d4=c1⊕(c3⊕c4)=(p1 ⊕p4)⊕p4=p1————-d1
c2⊕d1=p2⊕p1⊕p1=p2—————d2
(d1,d2,d3,d4)
代码如下:
clc
clearvars
n=4
p(n)=0;
for i=1:np(i)=randi([0 255], 1, 1);
end
p
c(1)=p(1);
for i=2:nc(i)=bitxor(c(i-1),p(i));
end
c(1)=bitxor(p(1),c(n));
cfor i=3:nd(i)=bitxor(c(i-1),c(i));
end
d(1)=bitxor(c(1),c(n));
d(2)=bitxor(c(2),d(1));
d
输出结果如下:
n =4p =38 65 215 65c =215 103 176 241d =38 65 215 65>>