logo资料库

信息安全课程设计报告.docx

第1页 / 共25页
第2页 / 共25页
第3页 / 共25页
第4页 / 共25页
第5页 / 共25页
第6页 / 共25页
第7页 / 共25页
第8页 / 共25页
资料共25页,剩余部分请下载后查看
实验一 DES/AES加密解密
1.1 DES加密
1.2AES加密
实验二 RSA加密解密
1.RSA加密方式介绍
2.实验内容
3.测试
4.源代码
实验三 MD5加密
1.MD5加密方式介绍
2.实验内容
3.测试
4.源代码
实验四 Try和for相关测试
1.实验内容
2.测试代码
3.测试结果
4.实验结论
实验五 邮箱正则表达式
1.实验内容
2.测试代码
3.实验结果
课程设计
Java-JSSE-SSL 单向认证
目录
1.绪论
1.1软件设计的背景及意义
1.2软件设计技术原理
2.系统设计
2.1系统总计模块结构
2.2子模块实现流程图
2.3系统关键技术
3.系统实现
3.1开发环境概述
3.2主要模块具体实现
3.3项目截图
4.实验/调试问题解决
5.总结和体会
成 绩 软件安全工程课程报告 专业班级 学 号 姓 名 授课教师 (2018 年 11 月)
实验一 DES/AES 加密解密 1.1 DES 加密 (1) DES 加密介绍 DES 是一种对称加密算法,所谓对称加密算法即:加密和解密使用相同 密钥的算法。DES 加密算法出自 IBM 的研究,后来被美国政府正式采用, 之后开始广泛流传,但是近些年使用越来越少,因为 DES 使用 56 位密钥, 以现代计算能力,24 小时内即可被破解。 注意:DES 加密和解密过程中,密钥长度都必须是 8 的倍数。 (2) 实验内容 任写一个文本文件,将其内容用 DES 方式加密然后解密。 (3) 测试 (4) 源代码 import java.security.SecureRandom; import javax.crypto.Cipher; import javax.crypto.SecretKey; import javax.crypto.SecretKeyFactory; import javax.crypto.spec.DESKeySpec; public class DES { public DES() { super(); } public static void main (String arg[]) { //待加密内容 String str = "网络信息安全"; System.out.println("待加密内容:"+str); //密码,长度要是8的倍数 String password = "95880288"; System.out.println("密码:"+password); byte[] result = DES.encrypt(str.getBytes(),password); System.out.println("加密后:"+new String(result));
//直接将如上内容解密 try { byte[] decryResult = DES.decrypt(result, password); System.out.println("解密后:"+new String(decryResult)); } catch (Exception e1) { e1.printStackTrace(); } } /** * 加密 * @param datasource byte[] * @param password String * @return byte[] */ public static byte[] encrypt(byte[] datasource, String password) { try{ SecureRandom random = new SecureRandom(); DESKeySpec desKey = new DESKeySpec(password.getBytes()); //创建一个密匙工厂,然后用它把DESKeySpec转换成SecretKey对象 SecretKeyFactory keyFactory = SecretKeyFactory.getInstance("DES"); SecretKey securekey = keyFactory.generateSecret(desKey); //Cipher对象实际完成加密操作 Cipher cipher = Cipher.getInstance("DES"); //用密匙初始化Cipher对象 cipher.init(Cipher.ENCRYPT_MODE, securekey, random); //现在,获取数据并正式执行加密操作 return cipher.doFinal(datasource); }catch(Throwable e){ e.printStackTrace(); } return null; } /** * 解密 * @param src byte[] * @param password String * @return byte[] * @throws Exception */ public static byte[] decrypt(byte[] src, String password) throws Exception { // DES算法要求有一个可信任的随机数源 SecureRandom random = new SecureRandom(); // 创建一个DESKeySpec对象 DESKeySpec desKey = new DESKeySpec(password.getBytes()); // 创建一个密匙工厂
SecretKeyFactory keyFactory = SecretKeyFactory.getInstance("DES"); // 将DESKeySpec对象转换成SecretKey对象 SecretKey securekey = keyFactory.generateSecret(desKey); // Cipher对象实际完成解密操作 Cipher cipher = Cipher.getInstance("DES"); // 用密匙初始化Cipher对象 cipher.init(Cipher.DECRYPT_MODE, securekey, random); // 真正开始解密操作 return cipher.doFinal(src); } } 1.2 AES 加密 (1) AES 加密介绍 高级加密标准(Advanced Encryption Standard,AES),是一种区块加密标准。 这个标准用来替代原先的 DES,已经被多方分析且广为全世界所使用。 AES 使用 128、192、和 256 位密钥,并且用 128 位分组加密和解密数据, 相对来说安全很多。使用穷尽法破解密钥长度在 128 位以上的加密数据是不现实 的,仅存在理论上的可能性。因为破解时间太长,AES 得到保障,但是所用的 时间不断缩小。 AES 现在广泛用于金融财务、在线交易、无线通信、数字存储等领域。 (2) 实验内容 任写一个文本文件,将其内容用 AES 方式加密然后解密。 (3) 测试 (4) 源代码 import java.io.UnsupportedEncodingException; import java.security.InvalidKeyException; import java.security.NoSuchAlgorithmException; import java.security.SecureRandom; import javax.crypto.BadPaddingException; import javax.crypto.Cipher;
import javax.crypto.IllegalBlockSizeException; import javax.crypto.KeyGenerator; import javax.crypto.NoSuchPaddingException; import javax.crypto.SecretKey; import javax.crypto.spec.SecretKeySpec; public class AES { /** * AES加密字符串 * @param content 需要被加密的字符串 * @param password 加密需要的密码 * @return 密文 */ public static byte[] encrypt(String content, String password) { try { KeyGenerator.getInstance("AES");// 创建AES的Key生产者 KeyGenerator kgen = kgen.init(128, new SecureRandom(password.getBytes()));// 利用用户密码作为随机数初始 化出 // 128位的key生产者 //加密没关系,SecureRandom是生成安全随机数序列, password.getBytes()是种子,只要种子相同,序列就一样,所以解密只要有 password就行 SecretKey secretKey = kgen.generateKey();// 根据用户 密码,生成一个密钥 byte[] enCodeFormat = secretKey.getEncoded();// 返回 基本编码格式的密钥,如果此密钥不支持编码,则返回 // null。 SecretKeySpec key = new SecretKeySpec(enCodeFormat, "AES");// 转换为AES专用密钥 Cipher cipher = Cipher.getInstance("AES");// 创建密码 器 模式的密码器 byte[] byteContent = content.getBytes("utf-8"); cipher.init(Cipher.ENCRYPT_MODE, key);// 初始化为加密 byte[] result = cipher.doFinal(byteContent);// 加密 return result; } catch(Throwable e){ e.printStackTrace(); } return null; } /** * 解密AES加密过的字符串 * @param content AES加密过过的内容
* @param password 加密时的密码 * @return 明文 */ public static byte[] decrypt(byte[] content, String password) { try { KeyGenerator kgen = KeyGenerator.getInstance("AES");// 创建AES的Key生产者 kgen.init(128, new SecureRandom(password.getBytes())); SecretKey secretKey = kgen.generateKey();// 根据用户 密码,生成一个密钥 byte[] enCodeFormat = secretKey.getEncoded();// 返回 基本编码格式的密钥 SecretKeySpec key = new SecretKeySpec(enCodeFormat, "AES");// 转换为AES专用密钥 Cipher cipher = Cipher.getInstance("AES");// 创建密码 器 模式的密码器 cipher.init(Cipher.DECRYPT_MODE, key);// 初始化为解密 byte[] result = cipher.doFinal(content); return result; // 明文 } catch(Throwable e){ e.printStackTrace(); } return null; } public static void main(String[] args) { String str = "网络信息安全"; System.out.println("待加密内容:" + str); String password = "34156422"; System.out.println("密码:"+password); byte[] encrypt = AES.encrypt(str, password); System.out.println("加密后:" + new String(encrypt)); byte[] decrypt = AES.decrypt(encrypt, password); System.out.println("解密后:" + new String(decrypt)); } } 实验二 RSA 加密解密 1. RSA 加密方式介绍 RSA 加密算法是一种非对称加密算法。在公开密钥加密和电子商业中 RSA
被广泛使用。对极大整数做因数分解的难度决定了 RSA 算法的可靠性。换言之, 对一极大整数做因数分解愈困难,RSA 算法愈可靠。假如有人找到一种快速因 数分解的算法的话,那么用 RSA 加密的信息的可靠性就肯定会极度下降。但找 到这样的算法的可能性是非常小的。今天只有短的 RSA 钥匙才可能被强力方式 解破。 使用 RSA 一般需要产生公钥和私钥,当采用公钥加密时,使用私钥解密; 采用私钥加密时,使用公钥解密。 2. 实验内容 任写一个文本文件,将其内容用 RSA 方法加密然后解密。 3. 测试 公钥: MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCp9V9QMnqbPC5roh3eh6GQc1tvR6v7elaALyDcgL RE0uMwoLVSDfsI_VvR6jqQduRIYnT2dS4t1dP7eKCYkxyC3iNpd8M2AKdNpMmPedg6XScs1j1lVcBeHXJ96 dlkr5TgdV9EzTi6j2NFLHJuO_d5PsQqSJZz9bB75ula2yJwIDAQAB 私钥: MIICdgIBADANBgkqhkiG9w0BAQEFAASCAmAwggJcAgEAAoGBAKn1X1Ayeps8LmuiHd6HoZBzW29Hq_ v56VoAvINyAtETS4zCgtVINwj9W9HqOpB25EhidPZ1Li3V0_t4oJiTHILeI2l3wzYAp02kyY952DpdJyzWPWV VwF4dcn3p2WSvlOB1X0TNOLqPY0Usf4m4793kxCpIlnP1sHvm6VrbInAgMBAAECgYEAmRDKoYCE2W_u 4rLjsbl3MZAjBeqHouylU5CcNsmkbcWx4fiAOjPLYZnU_j6Mi0V6yI9rAOgK470DHpJA0GpVK1k9ORG0kaEd oY86DggczPedOt6hOa9KOroDKSxSXMqnG9S66SlGBT1JiV9DExait2of9kVIWMVR1yobujteckCQQDw0CM7 VEIkoNH7El7tnEwPvjCwcfx9GdUGjvAJmwVkfPaKl5Rfm5dSJzOq7wen1usryhTkgiGqJqjhybi_NkzAkEAtK1O i4h92GL70_yPNuG4RFZ5SOq8FPbilWPU1tYVAYyDqcqonabV_oOgV1BGa36_Pg2oj_CbOJmkQDy3QRLPQJ AOBJ4aWw8Q5xVmDksbcfDtteQveHrymArNJDmjj6fHeMgKDi75AvH_X41ehqg5LPBsF2l_MmO5Rc5pYt6ng eQJAUiV90bkUJp8SilaJMtWuIvwCFuIK86kwaeXC7o7VbCfb8QXgVhV1tEtaSniIG_W7s9X37sHhgQFyCXbRh verQJAd_IVlQ_f1GYMSBSpgYbSTp94ReAk1XQMTMhnlpN9Wshb2NKAixIep56L8y9Bp3CV__VQMuR7Z8l mwMz5DA-tSw 公钥加密——私钥解密 明文: RSA 加密算法对于加密数据的长度是有要求的。一般来说,明文长度小于等于密钥长度(Bytes)-11。解 决这个问题需要对较长的明文进行分段加解密 明文大小:191 密文: OWqeCccB0lnRKfUe92e6xjv_Zw92hOhZW0EkNAlDdtRAdXkISuzYTt4EI9qRdGsLBKGb0s54Aou0giLK4MQ lynWwcCjJz06_zCMf_M6SHrRF9EtQHkzP9Jo83sYPSdfw6OqWMoeRnHqrrKXiY0DX0Jj_Suf1BfgsrOvKSAX xI94tZ8hNKLMuHMSddnH6FTFuW2Gib_Dv9w5ID1Rs7czIUr1WS7esQKZV9O3Yh0awRrDvFBC_QWT2neT HnBYLUMkjhaQanutqXLfzram_jjjdL_SlbztcwDu84Y7gcAoOTa-2VqZQMWf--SFW92Tw_1Hd8NwrUyTGzRb oV3yhg-Fw 解密后文字: RSA 加密算法对于加密数据的长度是有要求的。一般来说,明文长度小于等于密钥长度(Bytes)-11。解 决这个问题需要对较长的明文进行分段加解密 4. 源代码 import org.apache.commons.codec.binary.Base64; import org.apache.commons.io.IOUtils; import java.io.ByteArrayOutputStream;
分享到:
收藏