一、算法原理
我们可以将明文看成一个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个时钟周期,和得到广泛应用的加密算法相比,效率优势非常明显(大多数对称加密算法对每个字节的加解密都需要数十个时钟周期,非对称加密算法的耗时则更长)。基于这一点,完全可以进行多次加密运算以获得更高的安全性,而不会有太大的性能负担。
实操指南:如何监控聊天中的敏感信息?这款秘籍软件,轻松掌握微信聊天动态
电影《摩登时代》里,流水线工人就连在吃饭时都要用“自动喂食机”提高效率,这样才能挤出更多时间投入工作。虽然现在打工人不至于此,但有些老板仍然放心不下……像企业聊天记录往往蕴含着大量的敏感信息。为了确保信息安全,监控聊天中的敏感信息成为了一项必要且重要的工作。以下是一款秘籍软件,帮助你轻松掌握微信聊天动态,确保信息安全。...
怎么监控员工上班情况?2024企业管理的四种方法,老板们不容错过
怎么监控员工上班情况?2024企业管理的四种方法,老板们不容错过员工上班在干什么?摸鱼?打游戏?老板该怎么管理?如何才能监视怎么监控员工上班情况?监控员工上班情况可以通过多种方式实现,但重要的是要确保这些措施既合法又合规,同时尊重员工的隐私权。以下是一些建议的方法:一、制定明确的行为规范与奖惩制度1、制定行为规范: 企...
怎么监控员工上班情况?快速监控员工状态
怎么监控员工上班情况?快速监控员工状态在企业管理中,如何有效监控员工上班情况,确保工作效率与团队协作,是每位老板都需面对的课题。本文为您揭秘五招快速监控员工状态的实用技巧,不仅能帮助您实时掌握员工动态,还能提升整体管理效率。作为老板,掌握这些技巧,将让您在企业管理中游刃有余,轻松应对各种挑战。一、使用安企神软件实时监控...
安企神桌管软件:提升企业管理效率的全能助力
安企神桌管软件:提升企业管理效率的全能助力在当今竞争激烈的商业环境中,企业必须不断优化管理和运营流程,以提高效率和盈利能力。安企神桌管软件正是这样一款面向中小企业的管理工具,能够帮助企业在多方面提升综合管理水平。本文将详细探讨安企神桌管软件给企业带来的多重价值。一、全方位的管理功能安企神桌管软件是一款集成了多种管理功能...
安企神:揭开终端安全管理软件的神秘面纱
安企神:揭开终端安全管理软件的神秘面纱在数字化日益普及的今天,企业的网络安全问题愈发显得重要。数据泄露、网络攻击等事件层出不穷,如何保障企业内部信息的安全性成为众多企业关心的焦点。安企神终端安全管理软件应运而生,作为一款专业的安全管理工具,它的功能与优势备受关注。本文将全面揭秘安企神软件的核心功能、应用场景及其在终端安...