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