一、算法原理
我们可以将明文看成一个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个时钟周期,和得到广泛应用的加密算法相比,效率优势非常明显(大多数对称加密算法对每个字节的加解密都需要数十个时钟周期,非对称加密算法的耗时则更长)。基于这一点,完全可以进行多次加密运算以获得更高的安全性,而不会有太大的性能负担。
当青岛*测控技术有限公司遇上安企神,测控技术数据安全将迎来哪些新变化?
海*测控技术有限公司是海*微电子有限公司100%控股子公司,是由青岛市政府、山东省政府及行业领军企业共同出资成立的第三方检测平台。旨在集成电路可靠性验证及测试分析领域打造国内一流集成电路检测、分析、设计开发及技术解决方案等集成电路产业共性技术服务平台。海*以海洋装备和高端设备集成电路可靠性验证和测试分析为特色,主要为海...
"聚势谋远:重庆*医药集团与安企神达成战略合作,探索医药+科技融合发展新路径!
重庆*医药集团有限公司成立于2017年8月,是在重庆市*区医药(集团)有限责任公司基础上组建成立的大型医药产业企业。是重庆*经济技术开发(集团)有限公司控股的混合所有制企业和市级重点项目三峡国际健康产业园投资单位,位列全国百强医药流通企业。公司下辖重庆*制药有限公司、*医药科技重庆有限公司、重庆*肿瘤医院等十余家子公司...
聚焦核心数据安全:山东卫禾*股份有限公司携手安企神软件构建防泄密屏障!
项目背景山东卫禾*股份有限公司于2015年注册成立,公司拥有总资产1.5亿元,公司具有齿轮检测中心、三坐标测量仪、全谱直读光谱仪等关键研发设备。运用UGNX7.5、MASTA5.4等研发软件进行研发,具有强大的技术研发能力,拥有31项专利,坚持产学研结合,设有山东卫禾*技术研究院,并不断加强研发平台建设,打造创新型企业...
安全+智造双升级!江阴*电子有限公司携手安企神开启企业防护新时代!
江阴*电子有限公司成立于1989年,是一家电子元器件集成设计和生产服务的领先供应商。产品应用包括数据采集、计算机外围设备和其他电子产品。还进入了汽车电子行业、航空航天行业、工业控制行业、医疗器械行业和消费电子行业,为客户提供更广泛的高附加值产品和服务。随着科技产业的快速发展和市场需求的增加,现已成功转型为一家提供完整解...
福建*医药公司联手安企神软件,成功落地应用程序、网站黑名单设置与USB管控方案!
项目背景福建*医药有限公司前身是福建*工贸责任有限公司,2015年重组后成为中国五百强企业——*医药集团的子公司。 系中国最大的民营医药集团,是在中国医药商业行业处于领先地位的上市公司。公司成立于2015年08月04日,经营范围包括中药饮片、中成药、化学原料药、化学药制剂等。应用需求管控公司电脑安装程序和使用程序,禁...