当前位置: 首页 > backend >正文

置换密码程序设计

置换、幻方加解密

    • (一)描述
    • (二)原理
    • (三)程序
    • (四)实现


(一)描述


在这里插入图片描述


(二)原理


在这里插入图片描述

在这里插入图片描述


(三)程序



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("./transposition.txt");transposition(transFile, key);// 读取本地txt文件幻方加密的明文,进行幻方加密File magicFile = new File("./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("./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("./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;}
}

(四)实现


1)创建文件夹huanfang

magic_square.txt和transposition.txt存放准备加密的明文,Magic.txt、trans.txt存放生成的密文,Experiment2.java用于算法实现。

在这里插入图片描述

2)写入明文

magic_square.txt、transposition.txt填入要加密的明文4D 61 65 53 2D 4F 69 20 4E,如下:

在这里插入图片描述

3)运行结果

控制台输入: java Experiment2.java

在这里插入图片描述

http://www.xdnf.cn/news/3433.html

相关文章:

  • GitHub 趋势日报 (2025年04月30日)
  • 算法-二分查找
  • archlinux wine 运行windows程序
  • css中盒模型有哪些
  • 前端八股 7
  • 如何让Steam下载速度解除封印?!
  • 渗透测试中的那些“水洞”:分析与防御
  • 【Game】Powerful——Abandoned Ruins(9)
  • node.js模块化步骤(各标准区别)CommonJS规范、AMD规范、UMD规范、ES Modules (ESM)
  • qemu(4) -- qemu-system-arm使用
  • 三生原理的离散生成逻辑如何与复分析结合?
  • 2025大模型微调视频课程全套(附下载)
  • WPF之Image控件详解
  • Sentry 异常捕获
  • 第 2.3 节: 基于 Python 的关节空间与任务空间控制
  • AUTOSAR图解==>AUTOSAR_RS_TimingExtensions
  • Rerank详解
  • C++初阶-string类3
  • 补题 (Multiples of 5)
  • PostgreSQL运算符
  • 【JSON vs Python字典】核心区别与互操作指南
  • RPG_5.角色动画
  • C语言-函数的递归和迭代
  • Spring Boot 使用 WebMagic 爬虫框架入门
  • 腾讯云BI VS quickbi 企业选型(从企业实际功能使用和费用对比)
  • 在项目中如何对Map List等对象序列化及反序列化
  • 雅马哈SMT贴片机高效精密制造解析
  • 【数据结构】线性表--顺序表
  • 59常用控件_QComboBox的使用
  • 【C语言练习】015. 声明和初始化指针