基于古典密码算法、DES算法和RSA算法的密码器制作

信息安全专业学生制作了一款基于古典密码、DES和RSA的密码器,实验涉及了置换密码、DES的CBC和ECB模式以及RSA非对称加密。在实现过程中,学习并应用了微软MFC进行图形界面开发,虽然遇到挑战,但收获颇丰。
摘要由CSDN通过智能技术生成

学信息安全专业是必须要跟密码打交道的,上周我们制作了基于古典密码、DES算法和RSA算法的密码器,说实话算法挺难的,做的时候是在老师提供的部分算法代码的基础上,又上网查了好多好多的资料,以及自学了微软MFC的使用才做成的。

先简单介绍一下古典密码、DES和RSA。

古典密码:
编码方法包括置换和代换。把明文中的字母重新排列,字母本身不变,但其位置改变了,这样编成的密码称为置换密码。最简单的置换密码是把明文中的字母顺序倒过来,然后截成固定长度的字母组作为密文。代换密码则是将明文中的字符替代成其他字符。

DES:
DES全称为Data Encryption Standard,即数据加密标准,是一种使用密钥加密的块算法,1977年被美国联邦政府的国家标准局确定为联邦资料处理标准(FIPS),并授权在非密级政府通信中使用,随后该算法在国际上广泛流传开来。
本次实验中主要实现了cbc和ecb方法。
cbc方法我查资料的时候看到一篇不错的博客,放链接:DES-CBC
ecb比较简单,放一个链接:DES-ECB

RSA:
RSA加密算法是一种非对称加密算法。在公开密钥加密和电子商业中RSA被广泛使用。对极大整数做因数分解的难度决定了RSA算法的可靠性。换言之,对一极大整数做因数分解愈困难,RSA算法愈可靠。假如有人找到一种快速因数分解的算法的话&#x

1.古典密码算法之 替代算法 import java.io.*; public class Caesar { //向右加密方法 ming为明文 mi 为密文 yao为密钥 public static void encode(String ming, int yao) { String mi = ""; for(int i=0; i<ming.length(); i++){ if (ming.charAt(i) == 32) mi += (char)(32); else if (ming.charAt(i) >= 'a' && ming.charAt(i) <= 'z') mi += (char)('a' + ((ming.charAt(i) - 'a' + yao) % 26)); else if (ming.charAt(i) >= 'A' && ming.charAt(i) <= 'Z') mi += (char)('A' + ((ming.charAt(i) - 'A' + yao) % 26)); else if (ming.charAt(i) >= '0' && ming.charAt(i) <= '9') mi += (char)('0' + ((ming.charAt(i) - '0' + yao) % 10)); } System.out.println("密文为: " + mi); } /* * 2.古典密码算法之 置换算法 * */ public class Change { //当加密或者解密成功时返回CRYPT_OK,失败时返回CRYPT_ERROR private final static int CRYPT_OK = 1; private final static int CRYPT_ERROR = 0; /* * @param initCode 没有加密前的字符串 * @CRYPT_OK 加密成功 * @CRYPT_ERROR 加密失败 */ public static int encrypt(String initCode) throws Exception{ //用来输出加密后的字符 StringBuilder sb = new StringBuilder(); //获取initCode的字符串长度 int codeLength = initCode.length(); //根据这个codeLength来确定要几行6列 int rows = (int)Math.ceil(codeLength/6.0 ); //构造一个rows行6列的数组 char[][] initChar = new char[rows][6]; //存放initCode中的所有字符,包括空格 for(int i = 0; i < initChar.length; i++ ) for(int j=0; j < initChar[0].length; j++){ //将对应字符放入这个数组中 try{ initChar[i][j] = initCode.charAt( (i ) * initChar[0].length + j ); }catch(Exception e){
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值