Hill密码算法java
时间: 2023-11-18 16:46:27 浏览: 111
Hill密码算法是一种经典的密码算法,它使用矩阵代替单个字母,将明文矩阵乘以密钥矩阵,得到密文矩阵。下面是一个简单的Hill密码算法Java实现:
```java
import java.util.Scanner;
public class HillCipher {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.println("Enter the key matrix (3x3):");
int[][] key = new int[3][3];
for (int i = 0; i < 3; i++) {
for (int j = 0; j < 3; j++) {
key[i][j] = sc.nextInt();
}
}
System.out.println("Enter the plaintext:");
String plaintext = sc.next();
plaintext = plaintext.toUpperCase().replaceAll("\\s+", ""); // 删除空格并转换为大写字母
int n = plaintext.length();
if (n % 3 != 0) {
plaintext += "X".repeat(3 - n % 3); // 如果不是3的倍数,就补充X
n = plaintext.length();
}
int[] p = new int[n];
for (int i = 0; i < n; i++) {
p[i] = plaintext.charAt(i) - 'A';
}
int[] c = new int[n];
for (int i = 0; i < n; i += 3) {
for (int j = 0; j < 3; j++) {
int sum = 0;
for (int k = 0; k < 3; k++) {
sum += key[j][k] * p[i + k];
}
c[i + j] = sum % 26;
}
}
System.out.print("Ciphertext: ");
for (int i = 0; i < n; i++) {
System.out.print((char) (c[i] + 'A'));
}
}
}
```
这个程序要求用户输入一个3x3的密钥矩阵和明文,然后输出密文。如果明文的长度不是3的倍数,就用X补充。注意,在矩阵乘法中,矩阵的乘法不满足交换律,因此矩阵的顺序很重要。
阅读全文