一、实验目的

  1. 帮助学生掌握置换密码的加密解密过程,能够利用所学过的编程语言,熟悉加密算法流程与编程实现加密算法。使学生掌握编程实现实际问题中的方法,提高专业技能和专业素养。

  2. 要求学生掌握算法的程序实现的方法,能应用密码算法的特点,设计合适的交互界面,并能正确实现应用编程。

  3. 分析算法程序的质量。

  4. 要求学生掌握用规范的方法书写实验报告。

二、实验仪器设备/实验环境

  1. PC Windows环境

  2. 使用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实现置换加密和幻方加密(密码学)相关推荐

  1. java祖冲之加密算法_对称加密和非对称加密

    一  非对称加密 非对称加密和解密花费的时间长 非对称加密算法需要两个密钥:公开密钥(publickey)和私有密钥(privatekey),一般使用公钥进行加密,使用私钥进行解密. 常见的非对称加密 ...

  2. Java常用到的6个加密技术,先收藏,总会用得到

    加密,是以某种特殊的算法改变原有的信息数据,使得未授权的用户即使获得了已加密的信息,但因不知解密的方法,仍然无法了解信息的内容.大体上分为双向加密和单向加密,而双向加密又分为对称加密和非对称加密(有些 ...

  3. java加密解密 pdf_JAVA加密与解密的艺术 第2版 PDF 下载

    本书是Java安全领域公认的标杆之作,被奉为每一位Java开发工程师必读的著作之一.由资深专家撰写,第1版4年来畅销不衰,繁体版在台湾出版,大陆和台湾的读者都给予了极高的评价.第2版根据Java 7全 ...

  4. 非对称加密 密码传输_密码学:对称与非对称加密

    非对称加密 密码传输 Before the modern age of cryptography, where the focus has expanded from the confidential ...

  5. 一文让你轻松了解 JAVA 开发中的四种加密方法

    一.工具类 md5加密工具类 base64加密工具类 Bcrypt工具类 二.加密测试 MD5加密测试 base64加密测试 SHA加密测试 BCrypt加密测试 一.工具类 1. md5加密工具类 ...

  6. 从Java程序员的角度理解加密的那些事

    前言 在我们日常的程序开发中,或多或少会遇到一些加密/解密的场景,比如在一些接口调用的过程中,我们(Client)不仅仅需要传递给接口服务(Server)必要的业务参数,还得提供Signature(数 ...

  7. Java三行代码搞定MD5加密

    Java三行代码搞定MD5加密 https://www.dexcoder.com/selfly/article/4026 public class MD5Test {public static voi ...

  8. java 加密 数字_java 加密数字签名

    1)消息摘要: 这是一种与消息认证码结合使用以确保消息完整性的技术. 主要使用单向散列函数算法,可用于检验消息的完整性,和通过散列密码直接以文本形式保存等,目前广泛使用的算法有MD4.MD5.SHA- ...

  9. jquery java aes_[代码全屏查看]-java、js之间使用AES加密通信数据

    [1].[代码] java AES加密解密辅助类 package com.zoki.security; import ch.qos.logback.classic.Logger; import jav ...

最新文章

  1. Unity 4.x 2D游戏开发基础教程
  2. 【转】SQL Server 2005 数据类型和.Net数据类型的对应关系
  3. C++数组与指针概念
  4. jsapi支付签名_微信支付小程序支付全流程
  5. 看阿里云如何用云上技术创新,帮助哈啰单车实现智能数据收治
  6. (转)SpringMVC学习(二)——SpringMVC架构及组件
  7. Springboot邮箱接口(使用个人邮箱发送邮件)
  8. 传媒大学媒体中心资源批量获取工具的制作
  9. leetcdoe 26 删除排序数组中的重复项(python)
  10. Python Extension
  11. c语言两位数码管动态显示,十天学会单片机和c语言编程数码管动态显示.pptx
  12. 公司内部邮件格式范文
  13. 谷歌地图的API应用
  14. 小觅摄像头 VINS-MONO安装
  15. 细化算法matlab
  16. ROS教程 Gazebo仿真(2)-激光雷达
  17. python 死循环捕捉输入异常
  18. PADS-VX入门到精通实战项目讲解(下)—layout部分-覃小刚-专题视频课程
  19. HCIE 面试 ----- 组播
  20. Windows7直接刻录ISO

热门文章

  1. mavros 基于体轴坐标系下的无人机行人跟踪
  2. JS-面向对象-改变This的指向---使用call方法改变this的指向 / 使用apply方法改变this的指向 / 使用bind方法改变this的指向
  3. 打开网页到我们看到页面显示的过程中发生了什么?
  4. JS 浏览器扩展storage
  5. 如何破解受保护的excel密码
  6. 如何解决系统补丁(KB971092)重复安装问题
  7. mysql的入门基础操作
  8. 在生成.net core 3.0程序时不包含nuget库
  9. codeforces-1201 C Maximum Median
  10. 201521123063 《Java程序设计》 第7周学习总结