现代密码学实验报告.doc
《现代密码学实验报告.doc》由会员分享,可在线阅读,更多相关《现代密码学实验报告.doc(13页珍藏版)》请在一课资料网上搜索。
1、现代密码学实验报告学生姓名 学 号 专业班级 计算机科学与技术指导教师 段桂华 学 院 信息科学与工程学院 完成时间 2016年4月实验一 密码算法实验实验目的1.掌握密码学中经典的对称密码算法AES、RC4的算法原理。2.掌握AES、RC4的算法流程和实现方法。实验预备1.AES算法的基本原理和特点。2.流密码RC4的密钥流生成以及S盒初始化过程。 实验内容1. 分析AES、RC4的实现过程。2. 用程序设计语言将算法过程编程实现。3. 完成字符串数据的加密运算和解密运算输入十六进制明文:11223344556677889900AABBCCDDEEFF 输入十六进制密钥:13579BDF02
2、468ACE1234567890ABCDEF 实验步骤1. 预习AES、RC4算法。2. 写出算法流程,用程序设计语言将算法过程编程实现。3. 输入指定的明文、密钥进行实验,验证结果。4. 自己选择不同的输入,记录输出结果。写出所编写程序的流程图和运行界面、运行结果。一、AES算法1、AES算法简介AES 是一种可用来保护电子数据的新型加密算法。特别是,AES 是可以使用 128、192 和 256 位密钥的迭代式对称密钥块密码,并且可以对 128 位(16 个字节)的数据块进行加密和解密。与使用密钥对的公钥密码不同的是,对称密钥密码使用同一个密钥来对数据进行加密和解密。由块密码返回的加密数据
3、与输入数据具有相同的位数。迭代式密码使用循环结构来针对输入数据反复执行排列和置换运算。2、 算法实现及流程以加密函数为例,如下所示,首先对密钥进行预处理密钥扩展,然后明文进行Nr(Nr与密钥长度有关)次迭代运算,包括字节替换SubBytes、 移位行运算ShiftRows、混合列运算MixColumns、以及轮秘钥加密AddRoundKey。void Cipher() int i,j,round=0; / 把明文赋值到状态数组中 for(i=0;i4;i+) for(j=0;j4;j+) stateji = ini*4 + j; / 先与初始轮密钥相加 AddRoundKey(0); / 第一
4、轮至(Nr-1)轮的迭代运算,第Nr轮不用进行列混合运算 for(round=1;roundNr;round+) SubBytes(); /字节代换 ShiftRows(); /行移位 MixColumns(); /列混合 AddRoundKey(round); /密钥加 SubBytes(); ShiftRows(); AddRoundKey(Nr); / 加密结束,将机密结果填入数组out中以便输出 for(i=0;i4;i+) for(j=0;j4;j+) outi*4+j=stateji; 解密函数的流程和加密函数是一致的,只是对于行变换、列变换、以及相关s盒子为加密的逆过程。 字节替
5、换SubBytes是非线形置换,独立地对状态的每个字节进行。移位行运算ShiftRows是将状态阵列的各行进行循环移位,不同状态行的位移量不同。第0行不移动,第1行循环左移C1个字节,第2行循环左移C2个字节,第3行循环左移C3个字节。位移量C1、C2、C3的取值与Nb有关。混合列运算MixColumns是将状态阵列的每个列视为多项式,再与一个固定的多项式c(x)进行模x4+1乘法。Rijndael的设计者给出的c(x)为(系数用十六进制数表示):c(x)=03x3+01x2+01x+02。轮秘钥加密AddRoundKey是将轮密钥简单地与状态进行逐比特异或。轮密钥由种子密钥通过密钥编排算法得
6、到,轮密钥长度等于分组长度Nb。 程序流程图128位明文秘钥初始轮秘钥加密产生轮秘钥轮函数S盒变换Nr轮迭代控制 Nr个圈秘钥行移位与列混合 轮秘钥加密128位密文 AES流程图3、 运行结果 首先,输入指定密钥13579BDF02468ACE1234567890ABCDEF ,输入指定明文11223344556677889900AABBCCDDEEFF,进行实验,结果如图所示。 选择不同的输入,输入秘钥11223344556677889900AABBCCDDEEFF,输入明文13579BDF02468ACE1234567890ABCDEF ,输出结果如图所示。二、RC4算法1、RC4算法简介
7、 RC4加密算法是大名鼎鼎的RSA三人组中的头号人物Ron Rivest在1987年设计的密钥长度可变的流加密算法簇。首先,用从1到256个字节的可变长度密钥初始化一个256个字节的状态盒S256。然后,通过S盒子对密钥按字节进行变换。最后可以得到变换后的密钥。对于加密,只要让密钥按字节与明文进行异或。而解密,只要让密钥按字节与密文进行异或。2、 算法实现开始时,S中元素的值被置为按升序从0到255,即S0=0,S1=1, ,S255=255。同时对密钥keykey_len的进行填充到随机序列密钥rc4key256中,(key_len为key的字节长度,且不大于256)。循环重复用key,直到
8、rc4key的所有字节都被赋值。然后根据密钥re4key去对S盒进行变换。这些预操作可概括如下: /S盒先初始化为s0=0,s1=1.s255=255 for(i = 0; i 255; i+) Si=i; /初始化序列化密钥 for(i = 0; i 256; i+) j = i % key_len rc4keyi = key_dataj; /根据密钥rc4key,填充S盒 for( j = 0, i = 0; i 256; i+) j = (rc4keyi + Si + j) % 256; swap(&Si, &Sj); /交换Si和Sj的数值 矢量S一旦完成初始化,输人密钥就不再被使用密
9、钥流的生成是从s0到S255,对每个Si,根据当前S的值,将Si与S中的另一字节置换当S255完成置换后,操作继续重复,从S0开始。操作如下:/生成随机序列密钥 for(counter = 0; counter buffer_len; counter+) i = (i + 1) % 256; j = (Si + j) % 256; swap(&Si, &Sj); t = (Si + Sj) % 256; rc4keycounter = St;这两个过程使用同样的函数即可,加密中,将k的值与下一明文字节异或;解密中/将缓冲区数据和随机系列密钥进行异或,则可进行加密或者解密 ,将k的值与下一密文字
10、节异或。操作如下: for(i = 0; i buffer_len; i+) resulti = buffer_datai rc4keyi; 程序流程图S盒的初始化:S0=0,S1=1,.,S255=255秘钥与S盒做预算,生成序列rc4key得已知密文ciphertext得随机秘钥序列rc4key已知明文plaintext RC4流程图3、 运行结果 首先,输入指定密钥13579BDF02468ACE1234567890ABCDEF ,输入指定明文11223344556677889900AABBCCDDEEFF,进行实验,结果如图所示。4、选择不同的输入,输入秘钥11223344556677
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 现代 密码学 实验 报告
