JAVA实现置换加密和幻方加密(密码学)
一、实验目的
帮助学生掌握置换密码的加密解密过程,能够利用所学过的编程语言,熟悉加密算法流程与编程实现加密算法。使学生掌握编程实现实际问题中的方法,提高专业技能和专业素养。
要求学生掌握算法的程序实现的方法,能应用密码算法的特点,设计合适的交互界面,并能正确实现应用编程。
分析算法程序的质量。
要求学生掌握用规范的方法书写实验报告。
二、实验仪器设备/实验环境
PC Windows环境
使用Java编程语言开发环境,或者Maple语言。或者C#开发环境开发环境。
三、实验原理
置换密码加密解密过程:
设明文为:4D 61 65 53 2D 4F 69 20 4E。密钥为8,1,6,3,5,7,4,9,2。 求加密后的16进制密文。
解: 先思考和描述算法,也就是对明文4D 61 65 53 2D 4F 69 20 4E实现置换8,1,6,3,5,7,4,9,2。通过对数组赋值实现:
m(i)={4D 61 65 53 2D 4F 69 20 4E},i=1,2,3,…,9。
k(i)={8,1,6,3,5,7,4,9,2},i=1,2,3,…,9。
c(i)=m(k(i)), i=1,2,3,…,9。
c(1),c(2),…,c(9)为密文。
所以密文序列为:20 4D 4F 65 2D 69 53 4E 61。
幻方密码加密解密过程:
…
注意:密钥通过生成的2n+1阶幻方得到
import java.io.*;public class Experiment2 {public static void main(String[] args) throws IOException {//获取3阶幻方对应的置换int[] key = getMagicTrans(createMagicSquare(3));//读取本地txt文件中转置加密的明文,进行转置加密File transFile = new File("C:/Users/CD4356/Desktop/transposition.txt");transposition(transFile, key);//读取本地txt文件幻方加密的明文,进行幻方加密File magicFile = new File("C:/Users/CD4356/Desktop/magic_square.txt");magicSquare(magicFile, key);}//置换加密public static void transposition(File transFile, int[] key) throws IOException{String[] plainText = readTxt(transFile);System.out.println("\n\n置换加密的明文: ");for (int i = 0; i < plainText.length; i++) {System.out.print(plainText[i] + " ");}//将加密后的密文保存到.txt文件中,并以空格隔开FileWriter writer = new FileWriter(new File("C:/Users/CD4356/Desktop/trans.txt"));System.out.println("\n置换加密的密文: ");for (int i = 0; i < key.length; i++) {System.out.print(plainText[key[i]-1] + " ");if(i == key.length - 1){writer.write(plainText[key[i]-1]);} else {writer.write(plainText[key[i]-1] + " ");}}//释放资源writer.close();}//幻方加密private static void magicSquare(File magicFile, int[] key) throws IOException{//获取明文字符串数组String[] plainText = readTxt(magicFile);System.out.println("\n\n幻方加密的明文: ");for (int i = 0; i < plainText.length; i++) {System.out.print(plainText[i] + " ");}//将加密后的密文保存到.txt文件中FileWriter writer = new FileWriter(new File("C:/Users/CD4356/Desktop/Magic.txt"));//对明文进行加密,并保存到strArr字符数组中String[] strArr = new String[plainText.length];for (int i = 0; i < key.length; i++) {strArr[key[i]-1] = plainText[i];}System.out.println("\n幻方加密的密文: ");for (int i = 0; i < key.length; i++) {System.out.print(strArr[i] + " ");if(i == key.length - 1){ //字符间以空格隔开,末尾不能留有空格writer.write(strArr[i]);} else {writer.write(strArr[i] + " ");}}System.out.println("");//释放资源writer.close();}//生成奇数阶幻方,可以是3、5、7、... 、2n+1阶public static int[][] createMagicSquare(int k){int[][] magicArr = new int[k][k];int x = 0;int y = k/2;int total = k*k;for (int i = 1; i <= total; i++) {magicArr[x][y] = i;int m = (x-1+k)%k;int n = (y+1)%k;if (magicArr[m][n]>0) {x = (x+1)%k;}else{x= m;y= n;}}System.out.println("生成的3阶幻方:");for (int i = 0; i < magicArr.length; i++) {for (int j = 0; j < magicArr.length; j++) {System.out.print(magicArr[i][j] + " ");}System.out.println("");}return magicArr;}//幻方对应的置换public static int[] getMagicTrans(int[][] arr){int[] res = new int[(int) Math.pow(arr.length, 2)];int index = 0;for (int i = 0; i < arr.length; i++) {for (int j = 0; j < arr.length; j++) {res[index++] = arr[i][j];}}System.out.println("\n密钥:");for (int i = 0; i < res.length; i++) {System.out.print(res[i] + " ");}return res;}//读取.txt文件中的明文public static String[] readTxt(File file) throws IOException{//通过字符流读取.txtBufferedReader br = new BufferedReader(new FileReader(file));//将读取到的明文以空格进行分割,并保存到字符串数组中String[] plainText = br.readLine().split(" ");//释放资源br.close();return plainText;}
}
JAVA实现置换加密和幻方加密(密码学)相关推荐
- java祖冲之加密算法_对称加密和非对称加密
一 非对称加密 非对称加密和解密花费的时间长 非对称加密算法需要两个密钥:公开密钥(publickey)和私有密钥(privatekey),一般使用公钥进行加密,使用私钥进行解密. 常见的非对称加密 ...
- Java常用到的6个加密技术,先收藏,总会用得到
加密,是以某种特殊的算法改变原有的信息数据,使得未授权的用户即使获得了已加密的信息,但因不知解密的方法,仍然无法了解信息的内容.大体上分为双向加密和单向加密,而双向加密又分为对称加密和非对称加密(有些 ...
- java加密解密 pdf_JAVA加密与解密的艺术 第2版 PDF 下载
本书是Java安全领域公认的标杆之作,被奉为每一位Java开发工程师必读的著作之一.由资深专家撰写,第1版4年来畅销不衰,繁体版在台湾出版,大陆和台湾的读者都给予了极高的评价.第2版根据Java 7全 ...
- 非对称加密 密码传输_密码学:对称与非对称加密
非对称加密 密码传输 Before the modern age of cryptography, where the focus has expanded from the confidential ...
- 一文让你轻松了解 JAVA 开发中的四种加密方法
一.工具类 md5加密工具类 base64加密工具类 Bcrypt工具类 二.加密测试 MD5加密测试 base64加密测试 SHA加密测试 BCrypt加密测试 一.工具类 1. md5加密工具类 ...
- 从Java程序员的角度理解加密的那些事
前言 在我们日常的程序开发中,或多或少会遇到一些加密/解密的场景,比如在一些接口调用的过程中,我们(Client)不仅仅需要传递给接口服务(Server)必要的业务参数,还得提供Signature(数 ...
- Java三行代码搞定MD5加密
Java三行代码搞定MD5加密 https://www.dexcoder.com/selfly/article/4026 public class MD5Test {public static voi ...
- java 加密 数字_java 加密数字签名
1)消息摘要: 这是一种与消息认证码结合使用以确保消息完整性的技术. 主要使用单向散列函数算法,可用于检验消息的完整性,和通过散列密码直接以文本形式保存等,目前广泛使用的算法有MD4.MD5.SHA- ...
- jquery java aes_[代码全屏查看]-java、js之间使用AES加密通信数据
[1].[代码] java AES加密解密辅助类 package com.zoki.security; import ch.qos.logback.classic.Logger; import jav ...
最新文章
- Unity 4.x 2D游戏开发基础教程
- 【转】SQL Server 2005 数据类型和.Net数据类型的对应关系
- C++数组与指针概念
- jsapi支付签名_微信支付小程序支付全流程
- 看阿里云如何用云上技术创新,帮助哈啰单车实现智能数据收治
- (转)SpringMVC学习(二)——SpringMVC架构及组件
- Springboot邮箱接口(使用个人邮箱发送邮件)
- 传媒大学媒体中心资源批量获取工具的制作
- leetcdoe 26 删除排序数组中的重复项(python)
- Python Extension
- c语言两位数码管动态显示,十天学会单片机和c语言编程数码管动态显示.pptx
- 公司内部邮件格式范文
- 谷歌地图的API应用
- 小觅摄像头 VINS-MONO安装
- 细化算法matlab
- ROS教程 Gazebo仿真(2)-激光雷达
- python 死循环捕捉输入异常
- PADS-VX入门到精通实战项目讲解(下)—layout部分-覃小刚-专题视频课程
- HCIE 面试 ----- 组播
- Windows7直接刻录ISO
热门文章
- mavros 基于体轴坐标系下的无人机行人跟踪
- JS-面向对象-改变This的指向---使用call方法改变this的指向 / 使用apply方法改变this的指向 / 使用bind方法改变this的指向
- 打开网页到我们看到页面显示的过程中发生了什么?
- JS 浏览器扩展storage
- 如何破解受保护的excel密码
- 如何解决系统补丁(KB971092)重复安装问题
- mysql的入门基础操作
- 在生成.net core 3.0程序时不包含nuget库
- codeforces-1201 C Maximum Median
- 201521123063 《Java程序设计》 第7周学习总结