本文简介:MARS加密算法是IBM公司提供的一个候选加密算法。那么接下来,我就给大家简单的介绍一下MARS加密算法。一、MARS加密算法算法原理密钥增加作为预白化处理,经8轮无密钥的向前混合,8轮有密钥的向前变换,8轮有密钥的向后变换,8轮无密钥的向后混合,以及作为后白化处理的密钥减法。16轮有密钥的转换称为密码核(cryptographic core),无密钥的迭代使用两个8x32 bit S-boxes
MARS加密算法是IBM公司提供的一个候选加密算法。那么接下来,我就给大家简单的介绍一下MARS加密算法。
一、MARS加密算法算法原理
密钥增加作为预白化处理,经8轮无密钥的向前混合,8轮有密钥的向前变换,8轮有密钥的向后变换,8轮无密钥的向后混合,以及作为后白化处理的密钥减法。16轮有密钥的转换称为密码核(cryptographic core),无密钥的迭代使用两个8x32 bit S-boxes、加、异或操作。此外,有密钥的迭代使用32-bit密钥乘法、数据相倚旋转和密钥加法。混合与核心迭代都被修改为Feistel结构的迭代,其中,1/4的数据块用于标识其它3/4的数据块。
二、密钥的生成
MARS加密算法支持128~448位变长密钥,定义一个临时容器ULONG32 T用于存放用户输入的密钥,
T[0,1…n] = K[0,1…n]
T[n] = n ;
T[n+1,…14] = 0 ;
其中n是用户输入密钥的长度(4字节为单位)。
然后按照下面的算法进行操作:
for ( j = 0 ; j < 4 ; j++)
{
for ( i = 0; i < 15 ;i++)
{
/*T[i] ^= ((T[(i-7)%15]^T[(i-2)%15])<<<3)^(4*i+j);*/
}
for ( r = 0 ; r < 4 ; r++)
{
for ( i = 0; i < 15 ;i++)
{
/*T[i] = T[i]+ S[low 9 bits of T[(i-1)%15]])<<<9;*/
}
}
for ( i = 0 ; i < 10 ; i++)
{
/*T[10*j+i] = T[4*i%15];*/
}
最后我们需要修正那些在E-Fun操作中用作乘数的密钥也就是子密钥数组中的K[5],K[7],K[9],…K[35],要求他们的二进制表示形式中没有连续10个以上(含10个)的0或1。
需要修正的密钥为K[i] = K0K1K2…K30K31,保留K[i]的最低两位的值 n = K[i]&0x3,把K[i]的最低两位置1 w = K[i] | 0x3,产生掩码M:
最低两位置1后的K的二进制表示中如果含有10以上连续的0或1,那么将这些连续位置1,其他的位置0,然后把最低的两位和最高位置0,最后把连续位(1或0单独算)的起始位和中止位置0。
例如:
产生掩码后,我们利用n值作为s-box的索引取得一个替代值,这个s-box含有4个32位的元素,每个元素的二进制表示不含7个(含7个)连续的1或0,MARA加密算法推荐的s-box为:
ULONG32 B[4] = { 0xa4a8d57b , 0x5b5d193b , 0xc8a8309b , 0x73f9a978 }
然后利用如下算式得出K[i]:
K[i] = w ^ (( B[n] <<< ( low 5 bits of K[i-1]) & M)
三、明文加密
1、 第一步前向混合
输入的128位明文分成四块D[0],D[1],D[2],D[3],选取生成的40个密钥的前四个分别与上述四块数据进行加操作。
D[0] += K[0];
D[1] += K[1];
D[2] += K[2];
D[3] += K[3];
果作为第一轮操作的输入数据。
第一轮:
D[0]D[1]D[2]D[3]b0b1b2b3FirstTargetSecondTargetThirdTarget
输入的四块数据D[0],D[1],D[2],D[3],其中D[0]作为源数据(Source),剩下的3个作为目标数据,把32位的源数据D[0]分成8位的四块b0,b1,b2,b3
b0和b2作为数组下标从S0中寻找s-box替换数:S0[b0],S0[b2]
b1和b3作为数组下标从S1中寻找s-box替换数:S1[b1],S1[b3]
对FirstTarget的操作:
FirstTarget按位异或S0[b0]后的加上S1[b1]的结果返回给FirstTarget。
对SecondTarget的操作:
SecondTarget加上S0[b2]的结果返回给SecondTarget。
对ThirdTarget的操作:
ThirdTarget按位异或S1[b3]的结果返回给ThirdTarget。
对Source的操作:
Source循环右移24位后的结果返回给Source。
把D[0],D[1],D[2],D[3]合并成128位的数据,循环左移32位后作为下一轮的输入。
2、第二步密码核
把输入的128位数据分成四块D[0],D[1],D[2],D[3] ,其中D[0]作为源数据(Source),剩下的3个作为目标数据:
D[0]D[1]D[2]D[3]SourceFirstTargetSecondTargetThirdTarget
该步骤中有一个称为E-Fun(见下一节)的操作,把Source和对应两个子密钥(从第5个子密钥开始递增,本轮的输入子密钥K[4],K[5]下一轮的子密钥就是K[6],K[7])作为参数输入,返回三个操作输出L,M,R,然后把这三个输出结果和三个目标数进行加法或异或操作,然后把Source循环左移13位,合并D[0],D[1],D[2],D[3]形成128位数据,循环左移32位后作为下一轮的输入。
本步骤共进行16轮,假定E-Fun的第一个输出数为L,第二个输出数为M,第三个输出数为R。
前8轮中,FirstTarget 和 L相加的结果返回给FirstTarget;SecondTarge和M相加的结果返回给SecondTarget;ThirdTarget和R按位异或的结果返回给ThirdTarget。
后8轮中,FirstTarget 和 R按位异或的结果返回给FirstTarget;SecondTarge和M相加的结果返回给SecondTarget;ThirdTarget和L相加的结果返回给ThirdTarget。
3、 E-Fun操作
该操作利用输入的"种子"数据-D,和两个加密子密钥K1和K2生成3个输出数据。
定义三个临时变量L,M,R
◆ 把D(输入的种子数据)循环右移13位后的结果赋给R
◆ 把D和K1加操作的结果赋给M
◆ 取M的低9位作为s-box的索引找到替代数赋给L
◆ 把R和K2乘操作的结果作循环左移5位后的值返回给R
◆ 把L和R按位异或的结果返回给L
◆ 取R的低五位的值,把M循环左移这个值后的结果返回给M
◆ 把R循环左移5位后的结果返回给R
◆ 把L和R按位异或的结果返回给L
◆ 取R的低五位的值,把L循环左移这个值后的结果返回给L
把L,M,R作为E-Fun操作的第一,第二,第三输出数返回.
4、第三步后向混合
把输入的128位数据分成四块D[0],D[1],D[2],D[3]第一轮:
D[0]D[1]D[2]D[3]b0b1b2b3FirstTargetSecondTargetThirdTarget
输入的四块数据D[0],D[1],D[2],D[3],其中D[0]作为源数据(Source),剩下的3个作为目标数据,把32位的源数据D[0]分成8位的四块b0,b1,b2,b3。
b0和b2作为数组下标从S1中寻找s-box替换数:S1[b0],S1[b2]
b1和b3作为数组下标从S0中寻找s-box替换数:S0[b1],S0[b3]
对FirstTarget的操作:
FirstTarget按位异或S1[b0]后的结果返回给FirstTarget。
对SecondTarget的操作:
SecondTarget减去S0[b3]的结果返回给SecondTarget。
对ThirdTarget的操作:
ThirdTarget减去S1[b2]后与S0[b1]按位异或的结果返回给ThirdTarget。
对Source的操作:
Source循环左移24位后的结果返回给Source。
把D[0],D[1],D[2],D[3]合并成128位的数据,循环左移32位后作为下一轮的输入。
5、 密文的输出
进行完上述的操作后,对生成的密文D[0],D[1],D[2],D[3]与对应的最后4个子密钥进行减法操作形成最终的密文。
D[0] -= K[36]; D[1] -= K[37];
D[2] -= K[38]; D[3] -= K[39];
四、密文解密
用于密文解密的40个子密钥的生成和明文加密时的40个子密钥的生成方法相同。
1、第一步前向混合
输入的128位密文分成四块D[0],D[1],D[2],D[3],选取生成的40个密钥的最后四个分别与上述四块数据进行加操作。
D[0] += K[36];
D[1] += K[37];
D[2] += K[38];
D[3] += K[39];
结果作为第一轮操作的输入数据。
第一轮:
D[0]D[1]D[2]D[3]b0b1b2b3FirstTargetSecondTargetThirdTarget
把D[0],D[1],D[2],D[3]合并成128位的数据,循环左移32位后分成四块D[0],D[1],D[2],D[3]其中D[0]作为源数据(Source),剩下的3个作为目标数据,把D[0]循环右移24位后的结果返回给D[0]。
把32位的源数据D[0]分成8位的四块b0,b1,b2,b3
b0b1b2b3FirstTargetSecondTargetThirdTarget移动前D[0]D[1]D[2]D[3]移动后D[1]D[2]D[3]D[0]
b0和b2作为数组下标从S1中寻找s-box替换数:S1[b0],S1[b2]
b1和b3作为数组下标从S0中寻找s-box替换数:S0[b1],S0[b3]
对FirstTarget的操作:
FirstTarget按位异或S1[b0]的结果返回给FirstTarget。
对SecondTarget的操作:
SecondTarget加上S0[b3]的结果返回给SecondTarget。
对ThirdTarget的操作:
ThirdTarget按位异或S0[b1]后加上S1[b2]的结果返回给ThirdTarget。
本步骤共进行8轮,在第一轮和第五轮中操作结尾处添加将Source加上FirstTarget的结果返回给Source的操作。在第二轮和第六轮中操作结尾处添加将Source加上ThirdTarget的结果返回给Source的操作。
2、第二步密码核
把输入的128位数据循环左移32位后分成四块D[0],D[1],D[2],D[3],其中D[0]作为源数据(Source),剩下的3个作为目标数据,把Source循环右移13位的结果返回给Source,
D[0]D[1]D[2]D[3]SourceFirstTargetSecondTargetThirdTarget
把Source和对应两个子密钥(从第34个子密钥开始递减,本轮的输入子密钥K[34],K[35]下一轮的子密钥就是K[32],K[33])作为E-Fun(同加密)操作的输入参数,返回三个操作输出L,M,R,然后把这三个输出结果和三个目标数进行减法或异或操作,然后,合并D[0],D[1],D[2],D[3]形成128位数据作为下一轮的输入。
本步骤共进行16轮,假定E-Fun的第一个输出数为L,第二个输出数为M,第三个输出数为R。
前8轮中:
FirstTarget 和 R按位异或的结果返回给FirstTarget;
SecondTarge和M相减的结果返回给SecondTarget;
ThirdTarget和L相减的结果返回给ThirdTarget。
后8轮中:
FirstTarget 和 L相减的结果返回给FirstTarget;
SecondTarge和M相减的结果返回给SecondTarget;
ThirdTarget和R按位异或的结果返回给ThirdTarget。
3、第三步后向混合
把输入的128位的数据,循环左移32位后分成四块D[0],D[1],D[2],D[3]。
D[0]D[1]D[2]D[3]b0b1b2b3FirstTargetSecondTargetThirdTarget
其中D[0]作为源数据(Source),剩下的3个作为目标数据,把D[0]循环左移24位后的结果返回给D[0],把32位的源数据D[0]分成8位的四块b0,b1,b2,b3。
b0b1b2b3FirstTargetSecondTargetThirdTarget移动前D[0]D[1]D[2]D[3]移动后D[1]D[2]D[3]D[0]
b0和b2作为数组下标从S0中寻找s-box替换数:S0[b0],S0[b2]
b1和b3作为数组下标从S1中寻找s-box替换数:S1[b1],S1[b3]
对FirstTarget的操作:
将FirstTarget减去S1[b1]后再按位异或S0[b0]的结果返回给FirstTarget。
对SecondTarget的操作:
SecondTarget减去S0[b2]的结果返回给SecondTarget。
对ThirdTarget的操作:
ThirdTarget按位异或S1[b3]的结果返回给ThirdTarget。
本步骤共进行8轮,在第3轮和第7轮的128位数据循环左移32位操作之后添加将Source减去FirstTarget的结果返回给Source的操作,.在第4轮和第8轮128位数据循环左移32位操作之后添加将Source减去ThirdTarget的结果返回给Source的操作。
4、 明文的输出
进行完上述的操作后,对生成的D[0],D[1],D[2],D[3]与对应的起始4个子密钥进行减法操作还原成明文。
D[0] -= K[0]; D[1] -= K[1];
D[2] -= K[2]; D[3] -= K[3]。
小知识之加密算法
数据加密的基本过程就是对原来为明文的文件或数据按某种算法进行处理,使其成为不可读的一段代码,通常称为“密文”,使其只能在输入相应的密钥之后才能显示出本来内容,通过这样的途径来达到保护数据不被非法人窃取、阅读的目的。 该过程的逆过程为解密,即将该编码信息转化为其原来数据的过程。
如何加密电脑文档,电脑加密软件哪个最好用
如何加密电脑文档,电脑加密软件哪个最好用
不久前,一家知名科技公司的核心研发文件被非法泄露,给公司造成了巨大的经济损失。据调查发现,这是由一名离职员工在离职前通过非法手段获取文件,并将其出售给外部人员所致。这起事件不仅给公司带来巨大的经济损失,更暴露了公司在内部文件保护方面的漏洞。那么、企业在文件保护方面应该怎么做呢?
一、解决方案:
在如今信息高度流通、竞争激烈的商业环境中,保护企业核心数据的重要性不言而喻。我们可以使用专业数据数据加密软件对企业数据进行加密保护,通过加密软件,企业可以对重要的文件和数据进行加密,确保只有授权的人员可以访问和使用这些信息。这样可以有效减少泄露风险,保护企业核心数据的安全。
二、电脑加密软件哪个最好用?
安企神软件以其高效的加密功能和简洁的操作界面受到用户的喜爱。它支持多种加密算法,并提供了灵活的加密设置选项,能够满足不同用户的需求。
安企神软件作为一款国内知名的电脑加密软件,该具有强大的文件加密功能,可以对文件夹、文件进行全盘加密,有效防止数据泄露。
软件采用了先进的透明加密模式,日常使用无感知,但当被非法外发到企业外部电脑后,会自动变成乱码无法使用状态。
三、软件是如何加密电脑文档的
安企神软件通过以下方式加密电脑文档,从而保障数据的安全性:
1、透明无感知加密: 软件采用透明无感知加密技术,即在打开或编辑指定文件时,系统会自动对未加密的文件进行加密,对已加密的文件自动解密。用户在操作过程中无需额外操作,加密过程对用户是透明的,不会改变用户的正常工作习惯和文件使用方式。
2、精细的权限管理: 管理员可以为不同用户或用户组设置不同的文件访问权限,确保只有授权人员能够访问和使用加密文件。这有助于防止未经授权的访问和数据泄露。
3、批量加密与一键操作: 一旦加密策略配置完成,管理员可以通过安企神软件的管理端一键触发批量加密操作。软件将自动扫描企业局域网中所有电脑上的文件,并按照预设的策略进行加密。这大大提高了加密操作的效率和便捷性。
4、审计与追踪功能: 安企神软件能够实时记录文件的加密操作、访问历史以及修改、删除等操作,为管理员提供全面的审计和追踪功能。这有助于管理员及时发现异常行为并采取相应措施,确保数据的安全性。
5、防拷贝与防截图功能: 为防止文件内容被非法复制或截图,安企神软件提供防拷贝和防截图功能。这确保了即使文件被非法获取,其内容也不会被轻易泄露。
6、自动备份与恢复: 软件支持定期备份加密文件,以防数据丢失或损坏。同时,它也提供快速恢复功能,确保在紧急情况下能够迅速恢复文件,减少因数据丢失带来的损失。
四、总结
总的来说,加密电脑文档是保护数据安全的重要措施之一,安企神软件通过其强大的加密功能和丰富的安全管理特性,为用户提供了一个全面、高效的电脑文档加密解决方案。这有助于保护用户的数据安全,防止未经授权的访问和数据泄露。
本文为收集整理,文章部分观点不代表本站观点,如有侵权或其它问题请反馈客服。https://www.wgj7.com/cjwt/16262.html