📄 hill算法源代码.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 + -