密码学1实验报告

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
3.程序设计
模块设计如下(头文件):
#definePLAIN_FILE_OPEN_ERROR -1
#defineKEY_FILE_OPEN_ERROR -2
#defineCIPHER_FILE_OPEN_ERROR -3
typedef charElemType;
classCDES_zhy
{
public:
有些资料中介绍6位转4位的实现方法与本文所采用的不同,但殊途同归,最终的结果是相同的。
·数据换位
形成的32位right,
根据表8进行转换:
数据的原第16位换到第一位,原第7位换到第二位,……,依此类推,最后得到新的32位数据。
·交换数据
把right和left按位异或后的值赋给right,然后将本轮输入的原始right值赋给left。
对图片 加密。
加密后的文件为 。
选择解密按钮,可得到原文件 。
3.选择口令安全选项卡。
初始密码为:zhangyang,密钥为zhangyang。
若把密码改为abc,再次登录测试。
则再次登录即可登录成功,原来的密码已经失效。
四、实验中遇到的问题总结
1.编果得分
一、实验目的
1.编写程序实现DES的加、解密
1)编程构造DES的密钥;
2)应用上述获得的密钥将文件或文件夹或图片进行加、解密。
2.用DES算法实现口令的安全
二、实验内容
1.概要设计
1)编写CDES_zhy类,实现DES算法加解密;
2)编写用户界面,实现可视化操作;
3)核心代码与界面连接;
intDES_MakeSubKeys(ElemType key[64],ElemType subKeys[16][48]);
intDES_PC1_Transform(ElemType key[64], ElemType tempbts[56]);
intDES_PC2_Transform(ElemType key[56], ElemType tempbts[48]);
4.实现RSA密码体制。
二、实验内容
1.详细设计
1)加密解密
·密钥的产生
找出两个相异的大素数P和Q,令N=P×Q,M=(P-1)(Q-1)。
找出与M互素的大数E,用欧氏算法计算出大数D,使D×E≡1 MOD M。
丢弃P和Q,公开E,D和N。E和N即加密密钥,D和N即解密密钥。
·加密的步骤
计算N的有效位数tn(以字节数计),将最高位的零忽略掉,令tn1=tn-1
前面第i次迭代生成的两个28位长的密钥为
把 合并。
按照表4所示k的第一位为56位密钥的第14位,k的第2位为56位密钥的第17位,……,依此类推,k的最后一位最后一位是56位密钥的第32位。生成与进行第i次迭代加密的数据进行按位异或的48位使用密钥:
·迭代
DES算法密钥生成需要进行16次迭代,最终形成16套加密密钥:key[0]、key[1],key[2],……,key[14],key[15]。
比如N=0x012A05,其有效位数tn=5,tn1=4。
将明文数据A分割成tn1位(以字节数计)的块,每块看成一个大数,块数
记为bn。从而,保证了每块都小于N。
对A的每一块Ai进行Bi=Ai^E MOD N运算。Bi就是密文数据的一块,将所有密文块合并起来,就得到了密文数据B。
·解密的步骤
同加密的第一步。
2)编程实现了用上述获得的密钥将文件或文件夹或图片进行加、解密。
2.编程实现了用DES算法实现口令的安全
3.心得
1)通过上网查资料,又深入学习了DES的加密原理。
S盒是IBM自己定义的。B1b2b3b4b5b6用b1b6表示行,其他表示列,由此实现转换,E函数是对32位串的扩展,置换P是对密钥的置换。
4)测试程序;
5)调试程序;
6)得到Release版本。
2.详细设计
1)密钥生成
·取得密钥
从用户处取得一个64位(本文如未特指,均指二进制位)长的密码key, ,去除64位密码中作为奇偶校验位的第8、16、24、32、40、48、56、64位,剩下的56位作为有效输入密钥。
·等分密钥
·密钥移位
DES算法的密钥是经过16次迭代得到一组密钥的,把前面生成的A、B
intDES_ROL(ElemType data[56],inttime);
intDES_IP_Transform(ElemType data[64]);
intDES_IP_1_Transform(ElemType data[64]);
intDES_E_Transform(ElemType data[48]);
·素数检测法
对一个待测的随机大数p,计算p的有效位n,比如p=0x5A,则n=7。
选择一个小于p的随机数a。
令z=1,i=n。
x=z,z=d×d MOD N。
如果z=1并且x<>1并且x<>p-1,那么测试通不过,p不是素数。
如果p-1的第i位为1,令z=z×a MOD p,i=i-1。如果i>=0,则转到第三步。
intDES_Encrypt(char* plainFile,char* keyStr,char *cipherFile);
intDES_Decrypt(char* cipherFile,char* keyStr,char *plainFile);
};
三、实验结果
1.程序初始界面。
2.选择DES加解密选项卡。
·数据压缩
形成的48位right值, 需要把48位的right值转换成32位的right值。把right视为由8个6位二进制块组成,
a,b,……,h都是6位,强制转换成10进制整数的值都不大于64。a,b,…,h转成10进制整数后,在对应的表中根据转换后整数值取得对应位置的替代值,每6位用一个4位替换这样就完成了从48位向32位数据的转换。
·迭代
DES算法需要进行16次迭代,在完成16次迭代前,把第i-1次得到的的left和right的值作为第i次的输入数据,循环重复。
·数据整理
为保证加密和解密的对称性,DES算法的前15次迭代每完成一次迭代都要交换left和right的值,第16次迭代不交换两者的数值.到此把32位的left和right合并成64位的Data。
检查以确保p不能被任何小素数整除,如3,5,7,11等等。有效的方法是测试小于2000的素数。使用字轮方法更快。
对某随机数a运行Rabin-Miller检测,如果P通过,则另外产生一个随机数a,在测试。选取较小的a值,以保证速度。做5次Rabin-Miller测试,如果有一次失败,返回第一步,从新产生p,再测试。
intByteToBit(ElemType ch,ElemType bit[8]);
intBitToByte(ElemType bit[8],ElemType *ch);
intChar8ToBit64(ElemType ch[8],ElemType bit[64]);
intBit64ToChar8(ElemType bit[64],ElemType ch[8]);
如果z<>1,则同不过检测,p不是素数,否则通过检测,p可能为素数。这个测试算法速度快,但是有很小的概率会出错。如果用5次该算法进行检测,p是素数的概率可达到99.9%(1-(0.25)^5)。这里给出的该算法的过程可能和有些资料上不太一样,本人从经验上觉得这里给出的更可靠些。
2.程序设计
RSA算法的实现(头文件):
2)数据的加密操作
·取得数据
把明文数据分成64位的数据块,不够64位的数据块以适当的方式补足。
·初始换位
·数据扩展
第一次迭代以1.2.2步中生成的newData作为输入数据,第i (i > 1)次迭代以第i-1次的64位输出数据为输入数据,把64位数据按位置等分成左右两部分:
保持left不变,
把扩展后的48位right与第i次迭代生成的48位加密密钥进行按位异或操作 形成一个新的48位的right。
intsum();
voidEncrypt();
voidDecrypt();
intp,q; //选取的两个素数
intn,e,y,d; //n=p*q;y为n的欧拉数值;d是e在y下的乘法逆元
inta[160000]; //存储e的所有值
intc;
intfun;
intcount;
char*asd;
char*b;//存储明文
intDES_EncryptBlock(ElemType plainBlock[8], ElemType subKeys[16][48], ElemType cipherBlock[8]);
intDES_DecryptBlock(ElemType cipherBlock[8], ElemType subKeys[16][48], ElemType plainBlock[8]);
视为迭代的起始密钥,比如在第1次迭代时密钥,循环左移1位,第3次迭代时密钥循环左移2位。第9次迭代时密钥循环左移1位,第14次迭代时密钥循环左移2位。
第一次迭代:
A(1) =ǿ(1) A
B(1) =ǿ(1) B
第i次迭代:
A(i) =ǿ(i) A(i-1)
B(i) =ǿ(i) B(i-1)
·密钥的选取
实验2:实现RSA密码体制
姓名
张洋
院系
计算机科学与技术学院
学号
090420115
任课教师
刘扬
指导教师
刘杨
实验地点
宋健北楼402
实验时间
2011-10-24 18:40
实验课表现
出勤、表现得分
实验报告
得分
实验总分
一、实验目的
1.编写程序构造一RSA密钥;
2.编写程序实现快速指数算法;
3.编写程序生成大素数;
密码学应用与实践
实验报告
专业:信息安全
学号:090420115
姓名:张洋
哈尔滨工业大学(威海)
实验1:实现DES密码体制
姓名
张洋
院系
计算机科学与技术学院
学号
090420115
任课教师
刘扬
指导教师
刘杨
实验地点
宋健北楼402
实验时间
2011-10-24 18:40
实验课表现
出勤、表现得分
实验报告
得分
实验总分
数据的原第40位换到第一位,原第8位换到第二位,...,依此类推,最后的得到新的64位。
Data即为密文。
3)数据的解密
数据解密的算法与加密算法相同,区别在于1.2.3步中和数据进行按位异或的密钥的使用顺序不同,在加密中是按照第i次迭代就采用第i次迭代生成的密钥进行异或,而解密时第i次迭代就采用第17-i次迭代生成的密钥和数据进行异或。
2)测试发现DES,算法把64位密码中的第8位、第16位、第24位、第32位、第40位、第48位、第56位、第64位作为奇偶校验位,在计算密钥时要忽略这8位。如果输入的密码只是在这8位上有区别的话,那么操作后的结果将是一样的。
3)DES算法中只用到64位密钥中的其中56位,而第8、16、24、......64位8个位并未参与DES运算,这一点,向我们提出了一个应用上的要求,即DES的安全性是基于除了8、16、24、......64位外的其余56位的组合变化256才得以保证的。因此,在实际应用中,我们应避开使用第8、16、24、……64位作为有效数据位,而使用其它的56位作为有效数据位,才能保证DES算法安全可靠地发挥作用。如果不了解这一点,把密钥Key的8、16、24、……、64位作为有效数据使用,将不能保证DES加密数据的安全性。
将密文数据B分割成tn位(以字节数计)的块,每块看成一个大数,块数记为bn。
对B的每一块Bi进行Ci=Bi^D MOD N运算。Ci就是密文数据的一块,将所有密文块合并起来,就得到了密文数据C。
2)素数的产生
·实际考虑
产生一个n位的随机大数p。
设p的最高位和最低位都为1,以确保达到要求的长度,和确保该大数是奇数。
classCRSA_zhy
{
public:
CRSA_zhy();
~CRSA_zhy();
BOOLProduceSS(int* p,int*q);
intSelKey(intj);
BOOLisPrime(intx);
intgcd(int f1,intf2);
voidProduceKey(intx1,intx2);
intDES_P_Transform(ElemType data[32]);
intDES_SBOX(ElemType data[48]);
intDES_XOR(ElemType R[48], ElemType L[48],intcount);
intDES_Swap(ElemType left[32],ElemType right[32]);
相关文档
最新文档