网站大量收购闲置独家精品文档,联系QQ:2885784924

2024年信息安全实验报告.doc

  1. 1、本文档共18页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多

學生學号

试验課成绩

武汉理工大學

學生实验报告書

试验課程名称信息安全

開課學院计算机科學与技术學院

指导老師姓名

學生姓名

學生专业班级

—年第二學期

试验課程名称:信息安全

试验项目名称

DES對称分组密码系统的Java实現

试验成绩

试验者

专业班级

组别

同组者

试验曰期

6

第一部分:试验分析与设计(可加页)

试验内容描述(問題域描述)

原理:

(1)分组密码的加密方式是:首先将明文序列以固定長度進行分组,每组明文用相似的密钥和算法進行变换,得到一组密文。分组密码是以块為單位,在密钥的控制下進行一系列线性和非线性变换而得到密文的。

(2)分组密码的加/解密运算是:输出块中的每一位是由输入块的每一位和密钥的每一位共同决定。

(3)加密算法中反复地使用替代和移位两种基本的加密变换,此即Shannon1949年发現的隐藏信息的两种技术:混淆和扩散。

混淆:就是变化数据块,使输出位与输入位之间没有明显的记录关系(替代);

扩散:就是通過密钥位转移到密文的其他位上(移位)。

(4)分组密码的特點:良好的扩散性;對插入信息的敏感性,较强的适应性;加/解密速度慢;差錯的扩散和传播。

规定:DES對称分组密码系统的Java实現。

试验基本原理与设计(包括试验方案设计,试验手段确实定,试验环节等,用硬件逻辑或者算法描述)

importjava.security.spec.*;

importjavax.crypto.*;

importjavax.crypto.spec.*;

classDES01{

privateStringstrkey;

privateSecretKeyskey=null;

privateString[]algo=

{DES/ECB/PKCS5Padding,DES/ECB/NoPadding,DES};

publicDES01(Stringkey)

{

strkey=key;

}

publicvoidkeyGenerating()throwsException

{

byte[]bkey=strkey.getBytes();

KeySpecks=newDESKeySpec(bkey);

SecretKeyFactorykf

=SecretKeyFactory.getInstance(DES);

skey=kf.generateSecret(ks);

}

publicstaticvoidmain(String[]a){

DES01des=newDES01(IAMASTUDENT);

des.test02(STUDENTWANGFENGLIMING);

}

publicbyte[]Encripting(Stringplaintext,inti)

throwsException

{

byte[]bpt=plaintext.getBytes();

Ciphercf=Cipher.getInstance(algo[i]);

if(skey==null)this.keyGenerating();

cf.init(Cipher.ENCRYPT_MODE,skey);

byte[]bct=cf.doFinal(bpt);

returnbct;

}

publicbyte[]decripting(byte[]bct,inti)

throwsException

{

Ciphercf=Cipher.getInstance(algo[i]);

if(skey==null)this.keyGenerating();

cf.init(Cipher.DECRYPT_MODE,skey);

byte[]bpt=cf.doFinal(bct);

returnbpt;

}

publicvoidtest01(Stringmess)

{

try{

byte[]ct=this.Encripting(mess,0);

byte[]pt=this.Decripting(ct,0);

Stringptt=newString(pt);

System.out.println(ptt);

}catch(Exceptionex)

{

return;

}

}

publicvoidtest02(Stringmess)

{

try{

//Encripting

print(Plaintexttobeencript

文档评论(0)

159****1748 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档