密码学实验报告(3)

2018-12-17 15:03

printf(\*****\\n\\n\

printf(\

getchar(); 消除前面输入的字符对本次输入的影响 scanf(\ getchar();

if ( ans == 'n' ) 按n不继续测试 break ; } }

void KeyToBit() {

int i,j,r;

for ( i=0 ; i<4 ; i++ ) {

r = InputKey[i] ; for ( j=0 ; j<8 ; j++ )

Bit[j] = 0 ; 每个密钥序列初始化为全0,避免上一次转化保存到Bit数组给本次转化的影响。 j = 7 ;

while ( r!=0 ) 十进制转化为二进制的普遍算法 {

Bit[j--] = r % 2 ; r = r 2 ; }

for ( j=1 ; j<=8 ; j++ ) 将本次转化得到的8位序列附给初始化密钥序列InitKey相应的位

InitKey[8*i+j] = Bit[j] ; }

11 } ---

void LFSR() {

int p,q,temp; p = 0 ;

while ( p < 8 ) {

temp = InitKey[31] ^ InitKey[6] ^ InitKey[4] ^ InitKey[2] ^ InitKey[1] ^ InitKey[0] ;

抽头序列的异或值保存在temp

for ( q=31 ; q>0 ; q-- ) 将InitKey的元素后移,空出第0个的空间

InitKey[q] = InitKey[q-1] ;

InitKey[0] = temp ; InitKey[0] 保存抽头序列的异或值

LFSRKey[p] = InitKey[31] ; 这个就是每一次要求的LFSR序列,8个保存一次,便于加密 p++; }

for ( p=0 ; p<8 ; p++ )

Bit[p] = Bit[p] ^ LFSRKey[p] ; 当前明文字符的位序列与当前得到的LFSR异或得到加密结果

Output16(); 得到的8位0、1序列转化为16进制输出 } ---

void Output16() {

12 int i,j,TextInt,OutInt[2]; TextInt = 0 ; OutInt[0] = 0 ; OutInt[1] = 0 ;

for ( i=0 ; i<8 ; i++ ) 先把二进制转化为十进制整数保存在TextInt中

TextInt = TextInt + Bit[i] * (int)pow(2,7-i) ; j = 1 ;

while ( 1 ) 十进制转化为十六进制(整数表示) {

OutInt[j] = TextInt % 16 ; TextInt = TextInt 16 ; j-- ; if ( j < 0 ) break; }

for ( i=0 ; i<2 ; i++ ) 字符表示 {

if ( OutInt[i] > 9 )

Out[i] = OutInt[i] - 10 + 'A' ; else

Out[i] = OutInt[i] + '0' ; } } ---

void InfoToBit(int j) {

int TextInt,i; TextInt = Info[j] ;

13 i = 0 ;

for ( i=0 ; i<8 ; i++ ) Bit[i] = 0 ; i = 7 ;

while ( TextInt != 0 ) {

Bit[i] = TextInt % 2 ; TextInt = TextInt 2 ; i--; } }

实验三 DES

实验学时:4学时 实验类型:验证 实验要求:必修 一、实验目的

编程实现分组密码DES的加解密方法。 二、实验内容 分组密码DES。 三、实验原理、方法和手段

DES是对二元数字分组加密的分组密码算法,分组长度为64比特。每64位

14

明文加密成64位密文,没有数据压缩和扩展,密钥长度为56比特,若输入64比特,则第为奇偶检验位,所以,实际密钥只有56位。DES算法完全公开,其保密性完全依赖密钥。

图3-1是DES全部16轮的加解密结构图,其最上方的64比特输入分组数据,可能是明文,也可能是密文,视使用者要做加密或解密而定。而加密与解密的不同处,仅在于最右边的16个子密钥的使用顺序不同,加密的子密钥顺序为,而解密的子密钥顺序正好相反,为。

DES算法首先对输入的64位明文X进行一次初始置换IP(见图3-2),以打乱原来的次序。对置换侯的数据分成左右两半,左边记为,右边记为,对施行在子密钥控制下的变换,其结果记为,得到的32比特输出再与做逐位异或(XOR)运算,其结果成为下一轮的,则成为下一轮的。对,施行和,同样的过程得, ,如此循环16次,最后得,。再对64位数字,施行初始置换的逆置换(见图3-2),既得密文Y。运算过程可用公式(3.1)简洁地表示如下:

, ,

(3.1)

注意,在16次加密后并未交换,,而直接将,作为的输入,这样做使得DES的解密和加密完全相同,在以上过程中只需输入密文并反序输入子密钥,最后获得的就是相应的明文。以上是对DES加解密过程得描述。我们把从到的变换过程称为一轮加密。

初始置换IP及其逆置换并没有密码学意义,因为X与IP(X)(或Y与(Y))的一一对应关系是已知的,如X德第58比特是IP(X)的第1比特,X的第50比特是IP(X)的第2比特等等。他们的作用在于打乱原来输入X的ASC2码字划分的关系,并将原来明文的第位(校验位)变成IP的输出地一个字节。

函数是整个DES加密法中最重要的部分,而其中的重点又在S-盒(Substitution Boxes)上。函数可记作,其中A为32位输入,J为48位输入,在第i轮,,为由初始密钥(亦称种子密钥)导出的第i轮子密钥,输出为32比特。

图3-1 DES加解密流程

i=1,2,…16.

IP

15


密码学实验报告(3).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:无损检测机构等级划分办法

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: