安企神电脑监控软件 在线试用
扫码咨询客服
安企神电脑监控软件、局域网监控软件
首页
功能介绍
产品简介
下载中心
帮助中心
客户列表
关于安企神

双向遍历加密算法

更新时间:2022-10-28 15:42:17


本文简介:一、算法原理我们可以将明文看成一个Byte数组A[N],加解密过程就是对这个数组的运算。首先,我们从头到尾对它进行一次正向的遍历,在遍历的同时将每次遇到的元素的值与前一个元素的值叠加,并写回到数组中。即A[i]+A[i-1]=>A[i](i从2递增到N)。这样执行了遍历相加运算后,除了第一个元素之外,其余所有元素的值都会依赖于它之前的元素的值。不难发现,进行一遍遍历,只能让数组中下标大的元素

双向遍历加密算法

一、算法原理

我们可以将明文看成一个Byte数组A[N],加解密过程就是对这个数组的运算。首先,我们从头到尾对它进行一次正向的遍历,在遍历的同时将每次遇到的元素的值与前一个元素的值叠加,并写回到数组中。即A[i]+A[i-1]=>A[i](i从2递增到N)。这样执行了遍历相加运算后,除了第一个元素之外,其余所有元素的值都会依赖于它之前的元素的值。不难发现,进行一遍遍历,只能让数组中下标大的元素对下标小的元素形成依赖,而反过来则不成立,而理想中的情况应该是混合型的依赖。为了解决这个缺陷,我们可以使用反向遍历——思路与正向遍历相同,只是起止点对调了:A[i]+A[i+1]=>A[i](i从N-1递减到1)。经过了正反两次叠加遍历,数组中的每个元素的值都变得和其它所有元素的值相关了——由此,本算法也就相应的具备了抗反向分析以及差分分析的能力。

在解决了信息相关性的问题之后,接下来要做的就是将密钥置于在计算过程之中。首先,在正反遍历的求和计算过程中加入了两个长度为一个字节的密钥,分别作用于求和前和求和后的数组元素值,于是,加密过程就变成了:

正向遍历:((A[i]XOR K11)+A[i-1])XOR K12=>A[i]

反向遍历:((A[i] XOR K21)+A[i+1])XOR K22=>A[i]

虽然有了上面的两次遍历过程,但是,不难发现——在每次遍历中,都有一个位于起点的元素的值不会发生变化(正向遍历中的A[1]以及逆向遍历中的A[N])——为了避免这两个元素成为破解的切入点,必须对其进行进一步处理。于是,我们对数组两端的元素再进行一次加密,让它们在正反两次遍历开始时分别作用于相应的起始元素:

正向遍历前:((A[1] XOR K31)+K32=>A[1]

反向遍历前:((A[N] XOR K41)+K42=>A[N]

在完成了加密算法的设计后,接下来就是解密算法——上面的双向遍历叠加过程可以很容易的逆向为双向解密过程,具体见后面的代码,在此不再赘述。同时,不难发现解密密钥就是加密密钥,因此,本加密算法属于对称加密算法。

现在,密钥的复杂度达到了8个字节,即64Bits,能满足一般的加解密要求。为了获得更大的密钥空间,用户完全可以采用多次加密或者多层加密的方法。需要指出的是,由于本算法每次的加密对象都是整个明文,而不是某个定长区块,因此,多次嵌套加密后,所有的密钥信息都会被密文均匀的包容,而不是在固定长度的区块中相互混迭。

二、算法实现

下面是算法的Pascal代码实现(在此,我们使用字符串S作为加解密的对象):

procedure TwoWayEnc(var S:String;const K1,K2:Integer);

var

i,n:Integer;

K11,K12,K21,K22,K31,K32,K41,K42:Byte;

begin

n:=Length(S);

if n=0 then exit;

K11:=K1;K12:=K1 shr 8;

K21:=K1 shr 16;K22:=K1 shr 24;

K31:=K2;K32:=K2 shr 8;

K41:=K2 shr 16;K42:=K2 shr 24;

S[1]:=Char(Byte(S[1])xor K31+K32);

for i:=2 to n do

S[i]:=Char((Byte(S[i])xor K11+Byte(S[i-1]))xor K12);

S[n]:=Char(Byte(S[n])xor K41+K42);

for i:=n-1 downto 1 do

S[i]:=Char((Byte(S[i])xor K21+Byte(S[i+1]))xor K22);

end;

procedure TwoWayDec(var S:String;const K1,K2:Integer);

var

i,n:Integer;

K11,K12,K21,K22,K31,K32,K41,K42:Byte;

begin

n:=Length(S);

if n=0 then exit;

K11:=K1;K12:=K1 shr 8;

K21:=K1 shr 16;K22:=K1 shr 24;

K31:=K2;K32:=K2 shr 8;

K41:=K2 shr 16;K42:=K2 shr 24;

for i:=1 to n-1 do

S[i]:=Char((Byte(S[i])xor K22-Byte(S[i+1]))xor K21);

S[n]:=Char((Byte(S[n])-K42)xor K41);

for i:=n downto 2 do

S[i]:=Char((Byte(S[i])xor K12-Byte(S[i-1]))xor K11);

S[1]:=Char((Byte(S[1])-K32)xor K31);

end;

三、总结

通过实际测试,本算法在主频为2.0GHz的CPU上完成对10MB文本的加密及解密运算只需要0.11秒,平均每个字节的加密或解密运算量小于11个时钟周期,和得到广泛应用的加密算法相比,效率优势非常明显(大多数对称加密算法对每个字节的加解密都需要数十个时钟周期,非对称加密算法的耗时则更长)。基于这一点,完全可以进行多次加密运算以获得更高的安全性,而不会有太大的性能负担。

立即下载试用

企业为什么选择加密系统来防止数据泄露

  随着互联网的普及和网络安全的防范应用,网络化办公在给企业带来便利的同时,也给企业内部数据安全提出了更高的要求。面对企业数据安全的防范问题,传统的设备采用被动式响应防御,不适于内部局域网管理,企业要么改变传统的运作方式去适应这种变化,要么便需要寻求专业的数据加密系统来加以防护。


 

       安企神加密系统可以对公司重要文件进行主动加密,不仅仅是防止外来人员的窃取,更多的是防止内部人员的主动泄密,全面保护文件安全,同时管控内部员工的上网行为,提高办公效率。安企神采用了全新的解决方案,通过对现有的终端系列操作系统进行安全增强,让企业管理者能够对终端进行集中管理和控制,保证信息系统始终在可控状态下运行,从根源上有效抑制对信息系统安全的威胁,最终达到防止内部用户泄密以及外部用户攻击的目的。

 

       安企神兼具文档加密、权限管理以及安全网关控制,加密透明无感知,文档权限管理更加细致,企业无须改变原有的应用,也无须改变文档的流通习惯,可以很好保护机密文档在企业内外的使用安全,帮助企业搭建符合安全法规要求的信息保护体系。


本文为收集整理,文章部分观点不代表本站观点,如有侵权或其它问题请反馈客服。https://www.wgj7.com/cjwt/16187.html