⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 hill算法源代码.java

📁 Hill加密算法的基本思想是将l个明文字母通过线性变换将它们转换为k个密文字母。脱密只要做一次逆变换就可以了。密钥就是变换矩阵本身。即 M=m1m2……ml Ek(M)=c1c2……cl 其中
💻 JAVA
字号:
package hill;

import javax.swing.JOptionPane;
import java.io.*;



import java.lang.Character;
public class Hill {

	
	public static void main(String[] args) {
		// TODO 自动生成方法存根

		final int pair = 10; //明秘文对最大值
		String sc, sp;//明密文存储字符串
		int[][] cmatrix = new int[pair][pair];//密文存储矩阵
		int[][] newpmatrix = new int[pair][pair];
		int[][] oldpmatrix = new int[pair][pair];
		int[][] pmatrix = new int[pair][pair];//明文存储矩阵
		int[][] kmatrix = new int[pair][pair];//密钥存储矩阵
		int r, c;//实际输入行列限制
		r = c = Integer
				.parseInt(JOptionPane.showInputDialog("输入已知明密文对每对的字符个数"));

		for (int i = 1; i <= r; i++) {
			int j = 1;
			sp = JOptionPane.showInputDialog("输入明文");
			sc = JOptionPane.showInputDialog("输入密文");
			while (j <= c) {
				cmatrix[j][i] = Character.getNumericValue(sc.charAt(j - 1)) - 10;//字母转换成数字存储于密文矩阵
				pmatrix[j][i] = Character.getNumericValue(sp.charAt(j - 1)) - 10;//字母转换成数字存储于明文矩阵
				oldpmatrix[j][i] = Character.getNumericValue(sp.charAt(j - 1)) - 10;

				j++;
			}
		}

		System.out.println("\n行代换明文矩阵后的矩阵是:");

		for (int k = 1; k <= r; k++) {

			for (int t = c + 1; t <= c * 2; t++) {

				if ((t - k) == c) {

					pmatrix[k][t] = 1;

				}

				else {

					pmatrix[k][t] = 0;

				}

			}

		}

		for (int x = 1; x <= r; x++) {

			for (int y = 1; y <= c * 2; y++) {

				System.out.print(pmatrix[x][y] + " ");

			}

			System.out.println();

		}

		

		for (int k = 1; k <= c; k++) {

			if (pmatrix[k][k] != 1) {

				int bs = pmatrix[k][k];

				pmatrix[k][k] = 1;

				for (int p = k + 1; p <= c * 2; p++) {

					int sum = pmatrix[k][p];
					while (sum % bs != 0) {
						sum += 26;
					}

					pmatrix[k][p] = sum / bs;

					}

			}

			for (int q = 1; q <= r; q++) {

				if (q != k) {

					int bs = pmatrix[q][k];

					for (int p = 1; p <= c * 2; p++) {

						

						pmatrix[q][p] -= bs * pmatrix[k][p];

						

					}

				}

				else {

					continue;

				}

			}

		}

		

		System.out.println("\n明文矩阵的逆矩阵是:");

		for (int x = 1; x <= c; x++) {

			for (int y = r + 1; y <= r * 2; y++) {

				System.out.print(changemod(pmatrix[x][y]) + " ");
				newpmatrix[x][y - r] = pmatrix[x][y];

			}

			System.out.println();

		}

		System.out.println();

		for (int i = 1; i <= r; i++) {
			for (int j = 1; j <= c; j++) {

				int sum = 0;

				for (int k = 1; k <= c; k++) {
					sum += cmatrix[i][k] * newpmatrix[k][j];

				}

				kmatrix[i][j] = sum;

			}

		}

		System.out.println("密钥K矩阵为: ");

		for (int i = 1; i <= r; i++) {
			for (int j = 1; j <= c; j++) {
				System.out.print(changemod(kmatrix[i][j]) + " ");

			}

			System.out.println();

		}
		
		System.out.print("Press enter to exit!");
		
		try{ 
			System.in.read();
			System.in.read();
			}
			catch(IOException e){} 
			

		

	}
	
	public static int changemod(int input)
	{
		if(input>=26)
		{
			while(input>=26)
		  {
			input%=26;
		  }
		    return input;
		}
		
		if(input<0)
		{
			while(input<0)
			{
				input+=26;
			}
			 return input;
		}
		
		else return input;
	}

}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -