十进制加密技术.docVIP

  • 22
  • 0
  • 约3.09千字
  • 约 7页
  • 2017-03-25 发布于贵州
  • 举报
十进制加密技术十进制加密技十进制加密技术十进制加密技术

十进制加密技术 大家都知道,我们一般使用的HYPERLINK /加密算法都是是针对十六进制数进行加密的,而人习惯使用十进制数,在相当多的网络通信应用中需要对十进制数信息进行加密。有很多应用要求十进制数的明文位数和加密后的十进制数的密文位数相对应,而不能基于十六进制的加密算法就无法满足这方面的要求,采用十进制数的明文转换成十六进制数的明文进行加密,再将加密后的十六进制数的密文转换成十进制数,其密文的十进制位数将多于十进制数明文的位数,不能满足十进制数明文与密文长度相等的特殊要求。下面我们就给大家介绍一下十进制的加密技术。 一、十进制加密技术其算法原理 AES加密算法是美国的HYPERLINK /blog/133-sjjiamijishu.html数据加密国家标准,是对称加密算法中加密性能和速度等各项性能指标最好的加密算法。而本文我们基于十进制加密技术的新算法是以AES加密算法为基础,并对AES的四种加密运算进行重新设计,以适应十进制数的直接加密的要求。将AES中的轮密钥加改为轮密钥加密运算控制,不同的密钥加密运算的算法不一样,使加密算法具有随机性。提出了动态密钥的概念,做到了加密解密一次一密,使加密算法具有混沌加密算法一次一密的特点。因此,新算法同时具有AES加密算法、随机加密算法、混沌加密算法的优点。 1、加密中四种运算 该算法以AES加密算法为基础进行设计,对HYPERLINK /blog/858-aesjiamisuanfa.htmlAES算法中的四种加密运算S盒替换(ByteSub)、行移位(ShiftRows)、列混合(MixColumn)、轮密钥加(AddRounds)分别进行重新设计,将AES中的轮密钥加设计为轮密钥运算控制。下面分别对四种加密运算进行介绍: (1)S盒替换(S-box) 由于本加密算法是基于十进制数,所以S盒的空间为GF(10),相对于AES加密中的S盒GF(256)要小得多。为了使状态在加密过程中得到扩散,我们设计的S盒替换使替换的值与原值有2bit的变化,也就是在每一轮的替换中达到有一半的bit位发生了变化,使每一组状态state在加密过程中得到充分的扩散。我们设计的S盒如图所示: (2)行移位(ShiftRows) 下表中Nb为状态state的列数,ci为第i行移位的位数。状态根据实际使用情况可分为8位、12位、16位、20位、24位、28位、32位等十进制数,状态中最后3行循环移位的位数如下表所示。即第0行不移位。第1行移位c1位数。第2行移位c2位数,第3行移位c3位数,对与小于4列和大于7列的状态移位要进行特殊处理。 (3)列混合(MixColumn) 十进制数的列混合运算不能使用AES的列混合,AES列混合中的异或加对于十进制数没有可逆性。这里采用线性列混合的加密方法,加密时对每一列的数据进行列混合,得到的结果放回到原来的矩阵中,列混合矩阵见公式1: 列混合的逆矩阵见公式2: 定义1: 对于正整数矩阵A,如果存在正整数矩阵B,使得A*B=Emodm(E为单位矩阵),则称B为A的逆正整数矩阵。 定理1:对于正整数矩阵A,如果gcd(det(A),m)=1,则正整数矩阵A的逆正整数矩阵B存在,且det(A)*B=A*modm(det(A)为A的行列式的值,A*为A的伴随矩阵)。 证明:∵A*A-1=E 设一向量α使得A*α=kmodm,k为一向量,有A-1*k=A*det(A)*k=αmodm 如果存在一矩阵B,满足B=A-1modm 即det(A)*B=A*modm ∵gcd(det(A),m)=1 ∴gcd(det(A),m)αA* 根据线性同余式定理 ∴矩阵B存在且B=A-1modm 证毕 (4)轮密钥运算控制(ControlRoundKey) 在AESHYPERLINK /blog/category/jiamisuanfa加密算法中,利用密钥与状态对应的字节做异或运算来加密。但是异或运算对于十进制数没有可逆性,所以我们将AES轮密钥加改为轮密钥运算控制,定义了四种运算对状态循环加密运算。轮密钥运算控制程序有四个入口,入口由每一轮加密所使用的密钥的按位的和模上4来确定。该算法中一般要求密钥为32位十进制数,每一轮加密所用的密钥是由密钥扩展函数根据上一次加密所用的密钥扩展得到。轮密钥运算控制的伪代码如下: ControlRoundKey(State,key,time) { i0=len*time;//len为状态长度 enter=0; for(i=i0;ii0+len-1;i++) { enter=(enter+key[i])mod4; } for(i=0;ilen;i++) { j=(i+enter)mod4; ifj=0State[i]=(Stat

您可能关注的文档

文档评论(0)

1亿VIP精品文档

相关文档