当前位置:文档之家› 东莞理工学院信息安全概论期末大作业

东莞理工学院信息安全概论期末大作业

结合编程实例说明计算机加密的原理和方 法
班级: 学号: 姓名: 报告日期:2013年11月27日 1、 基础知识介绍
无论是网络传输中使用的安全传输协议,还是安全手段或安全措 施,它们都需要使用加密算法和相应的解密算法。不了解与此相关的加 密原理和算法,就很难深刻地认识各种安全传输协议,以及实现网络安 全所采用的数字凭证、数字签名等技术。 密码学是一门古老而深奥的学科,对一般人来说是非常陌生的。长 期以来,只在很小的范围内使用,如军事、外交、情报等部门。计算机 密码学是研究计算机信息加密、解密及其变换的科学,是数学和计算机 的交叉学科,也是一门新兴的学科。 随着计算机网络和计算机通讯技术的发展,计算机密码学得到前所 未有的重视并迅速普及和发展起来。在国外,它已成为计算机安全主要 的研究方向。 密码学的历史比较悠久,在四千年前,古埃及人就开始使用密码来 保密传递消息。 两千多年前,罗马国王Julius Caesare(恺撒)就开始使用目前称 为“恺撒密码”的密码系统。但是密码技术直到本20世纪40年代以后才有 重大突破和发展。 特别是20世纪70年代后期,由于计算机、电子通信的广泛使用,现 代密码学得到了空前的发展。 加密算法包括:对称加密算法、公开密钥算法和DES对称加密算 法。 二、计算机加密基本原理和方法 (1)对称加密算法 基于密钥的算法通常有两类:对称算法和公开密钥算法(非对称算 法)。对称算法有时又叫传统密码算法,加密密钥能够从解密密钥中推 算出来,反过来也成立。
运行结果分析
试对“1234567”进行加密,再将其解密:
输入“1234567”:
回车后,输出加密后的密文:pqrstuv
输入“1234567”的密文“pqrstuv”:
回车后出现解密后的明文“1234567”:
ቤተ መጻሕፍቲ ባይዱ
实例2:利用公开加密算法对“1234567”进行加密,并进行解 密 实验源代码:
package test; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.InputStream; import java.io.OutputStream; import java.security.Key; import java.security.SecureRandom; import javax.crypto.Cipher; import javax.crypto.CipherInputStream; import javax.crypto.CipherOutputStream; import javax.crypto.KeyGenerator; import sun.misc.BASE64Decoder; import sun.misc.BASE64Encoder; public class DESUtil { Key key ; public DESUtil() {
恺撒密码的替换方法是通过排列明文和密文字母表,密文字母表示 通过将明文字母表向左或向右移动一个固定数目的位置。例如,当偏移 量是左移3的时候(解密时的密钥就是3): 明文字母表:ABCDEFGHIJKLMNOPQRSTUVWXYZ 密文字母表:DEFGHIJKLMNOPQRSTUVWXYZABC 使用时,加密者查找明文字母表中需要加密的消息中的每一个字母 所在位置,并且写下密文字母表中对应的字母。需要解密的人则根据事 先已知的密钥反过来操作,得到原来的明文。例如: 明文:THE QUICK BROWN FOX JUMPS OVER THE LAZY DOG 密文:WKH TXLFN EURZQ IRA MXPSV RYHU WKH ODCB GRJ 恺撒密码的加密、解密方法还能够通过同余数的数学方法进行计 算。首先将字母用数字代替,A=0,B=1,...,Z=25。此时偏移量为n的 加密方法即为: E (x)= (x+n) mod 2 解密就是: D (x)= (x-n) mod 2
} public DESUtil(String str) { setKey(str); // 生成密匙 } public Key getKey() { return key ; } public void setKey(Key key) { this . key = key; } /** * 根据参数生成 KEY */ public void setKey(String strKey) { try { KeyGenerator _generator = KeyGenerator.getInstance ( "DES" ); _generator.init( new SecureRandom(strKey.getBytes())); this . key = _generator.generateKey(); _generator = null ; } catch (Exception e) { throw new RuntimeException( "Error initializing SqlMap class. Cause: " + e); } } /** * 加密 String 明文输入 ,String 密文输出 */ public String encryptStr(String strMing) { byte [] byteMi = null ; byte [] byteMing = null ; String strMi = "" ;
在大多数对称算法中,加解密的密钥是相同的。对称算法要求发送 者和接收者在安全通信之前,协商一个密钥。对称算法的安全性依赖于 密钥,泄漏密钥就意味着任何人都能对消息进行加解密。对称算法的加 密和解密表示为: EK(M)=C DK(C)=M (2)密钥加密算法 公开密钥算法(非对称算法)的加密的密钥和解密的密钥不同,而 且解密密钥不能根据加密密钥计算出来,或者至少在可以计算的时间内 不能计算出来。 之所以叫做公开密钥算法,是因为加密密钥能够公开,即陌生者能 用加密密钥加密信息,但只有用相应的解密密钥才能解密信息。加密密 钥叫做公开密钥(简称公钥),解密密钥叫做私人密钥(简称私钥)。 公开密钥K1加密表示为:EK1(M)=C。公开密钥和私人密钥是不 同的,用相应的私人密钥K2解密可表示为:DK2(C)=M。 (3)凯撒密码算法 原理 在密码学中存在着各种各样的置换方式,但所有不同的置换方式都 包含2个相同的元素。密钥和协议(算法)。凯撒密码的密钥是3,算法是 将普通字母表中的字母用密钥对应的字母替换。置换加密的优点就在于 它易于实施却难于破解. 发送方和接收方很容易事先商量好一个密钥, 然后通过密钥从明文中生成密文,即是敌人若获取密文,通过密文直接 猜测其代表的意义,在实践中是不可能的。 凯撒密码的加密算法极其简单。其加密过程如下: 在这里,我们做此约定:明文记为m,密文记为c,加密变换记为 E(k1,m)(其中k1为密钥),解密变换记为D(k2,m)(k2为解密密钥) (在这里k1=k2,不妨记为k)。凯撒密码的加密过程可记为如下一个变 换: c≡m+k mod n (其中n为基本字符个数) 同样,解密过程可表示为: m≡c+k mod n (其中n为基本字符个数) 对于计算机而言,n可取256或128,m、k、c均为一个8bit的二进制 数。显然,这种加密算法极不安全,即使采用穷举法,最多也只要255 次即可破译。当然,究其本身而言,仍然是一个单表置换,因此,频率 分析法对其仍是有效的。 方法:
BASE64Encoder base64en = new BASE64Encoder(); try { byteMing = strMing.getBytes( "UTF8" ); byteMi = this .encryptByte(byteMing); strMi = base64en.encode(byteMi); } catch (Exception e) { throw new RuntimeException( "Error initializing SqlMap class. Cause: " + e); } finally { base64en = null ; byteMing = null ; byteMi = null ; } return strMi; } /** * 解密 以 String 密文输入 ,String 明文输出 * * @param strMi * @return */ public String decryptStr(String strMi) { BASE64Decoder base64De = new BASE64Decoder(); byte [] byteMing = null ; byte [] byteMi = null ; String strMing = "" ; try { byteMi = base64De.decodeBuffer(strMi); byteMing = this .decryptByte(byteMi); strMing = new String(byteMing, "UTF8" ); } catch (Exception e) { throw new RuntimeException( "Error initializing SqlMap class. Cause: " + e); } finally { base64De = null ;
3、 环境介绍
编程语言 C语言/JAVA 编译环境 Microsoft Visual Studio 20008/eclipse 操作系统 Windows ,
4、 实例说明算机加密的原理和方法 实例1:利用对称加密算法对“1234567”进行加密,并进行 解密 程序源代码:
#include<iostream.h> //DES加密算法C语言实现 class SubKey{ //定义子密钥为一个类 public: int key[8][6]; }subkey[16]; //定义子密钥对象数组
相关主题