信息安全实验2分组密码加密

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

分组密码加密

一、实习目的

1.理解对称加密算法的原理,熟悉常用的对称加密算法:DES、TripleDES、Blowfish;

2.以DES加密算法为例,掌握分组加密算法加、解密过程的实现。

二、实习内容

1.[基本要求]

以DES/DESede为例,利用java中的相关类实现对指定字符串的加、解密。

2.[实现提示]

(1) 可以利用java中的KeyGenerator类创建对称秘钥,利用工厂类KeyGenerator的静态方法getInstance()获得KeyGenerator()类对象;

(2) 方法getInstance()的参数为字符串类型,指定加密算法的名称如:Blowfish、DES、DESede、HmacMD5或HmacSHA1等;

(3) 利用工厂类Cipher的对象可以创建密码器。同样的,getInstance()的参数为字符串类型,指定加密算法的名称。

三、算法分析和流程图

DES算法为密码体制中的对称密码体制,又被成为美国数据加密标准,是1972年美国IBM公司研制的对称密码体制加密算法。其密钥长度为56位,明文按64位进行分组,将分组后的明文组和56位的密钥按位替代或交换的方法形成密文组的加密方法。DES加密算法特点:分组比较短、密钥太短、密码生命周期短、运算速度较慢。DES工作的基本原理是,其入口参数有三个:key、data、mode。 key为加密解密使用的密钥,data为加密解密的数据,mode为其工作模式。当模式为加密模式时,明文按照64位进行分组,形成明文组,key用于对数据加密,当模式为解密模式时,key用于对数据解密。

四、测试数据和预期结果

1按照规定,密钥输入移位的数字,明文输入字母,如下图所示,加密成功2加密yanglingmalasong+123

3测试*能否加密

加密

4 测试汉字能否加密

五、源程序

import java.io.FileOutputStream;

import java.io.ObjectOutputStream;

import javax.crypto.KeyGenerator;

import javax.crypto.SecretKey;

public class Skey_DES {

/**

* @param args

*/

public static void main(String args[])throws Exception { // TODO Auto-generated method stub

KeyGenerator kg=KeyGenerator.getInstance("DESede");

kg.init(168);

SecretKey k=kg.generateKey();

FileOutputStream f=new FileOutputStream("H:\\key1.dat");

ObjectOutputStream b=new ObjectOutputStream(f);

b.writeObject(k);

}

}

import java.io.*;

import java.security.*;

import javax.crypto.*;

public class SEnc {

/**

* @param args

*/

public static void main(String args[])throws Exception { // TODO Auto-generated method stub

String s="Hello123Hello123Hello123Hello123";

FileInputStream f=new FileInputStream("H:\\key1.dat");

ObjectInputStream b=new ObjectInputStream(f);

Key k=(Key)b.readObject();

Cipher cp=Cipher.getInstance("DESede");

cp.init(Cipher.ENCRYPT_MODE,k);

byte ptext[]=s.getBytes("UTF8");

for(int i=0;i

{

System.out.print(ptext[i]+",");

}

System.out.println("");

byte ctext[]=cp.doFinal(ptext);

for(int i=0;i

{

System.out.print(ctext[i]+",");

}

FileOutputStream f2=new FileOutputStream("H:\\SEnc.dat");

f2.write(ctext);

}

}

import java.io.FileInputStream;

import java.io.ObjectInputStream;

import java.security.Key;

import javax.crypto.Cipher;

import javax.crypto.spec.SecretKeySpec;

public class SDec {

/**

* @param args

*/

public static void main(String args[])throws Exception { // TODO Auto-generated method stub

FileInputStream f=new FileInputStream("H:\\SEnc.dat");

int num=f.available();

byte[]ctext=new byte[num];

f.read(ctext);

FileInputStream f2=new FileInputStream("H:\\key1.dat");

ObjectInputStream b=new ObjectInputStream(f2);

Key k=(Key)b.readObject();

Cipher cp=Cipher.getInstance("DESede");

cp.init(Cipher.DECRYPT_MODE,k);

byte []ptext=cp.doFinal(ctext);

String p=new String(ptext,"UTF8");

System.out.println(p);

}

相关文档
最新文档