Hill密码算法java
时间: 2023-11-18 12:46:39 浏览: 29
Hill密码算法是一种基于线性代数的加密算法,它可以对一定长度的明文进行加密,得到与明文等长的密文。下面是一个简单的 Hill密码算法的实现示例,使用Java语言编写:
```java
import java.util.Scanner;
public class HillCipher {
static int mod = 26;
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
System.out.print("Enter the plain text: ");
String plainText = input.nextLine().toUpperCase().replaceAll("\\s", "");
System.out.print("Enter the key matrix: ");
String keyString = input.nextLine().toUpperCase().replaceAll("\\s", "");
int[][] keyMatrix = getKeyMatrix(keyString);
String cipherText = encrypt(plainText, keyMatrix);
System.out.println("Cipher text: " + cipherText);
}
public static int[][] getKeyMatrix(String keyString) {
int dimension = (int) Math.sqrt(keyString.length());
int[][] keyMatrix = new int[dimension][dimension];
int k = 0;
for (int i = 0; i < dimension; i++) {
for (int j = 0; j < dimension; j++) {
keyMatrix[i][j] = (int) (keyString.charAt(k) - 'A');
k++;
}
}
return keyMatrix;
}
public static String encrypt(String plainText, int[][] keyMatrix) {
int dimension = keyMatrix.length;
int len = plainText.length();
int[] plainTextVector = new int[len];
for (int i = 0; i < len; i++) {
plainTextVector[i] = (int) (plainText.charAt(i) - 'A');
}
int[][] plainTextMatrix = new int[len / dimension][dimension];
int k = 0;
for (int i = 0; i < len / dimension; i++) {
for (int j = 0; j < dimension; j++) {
plainTextMatrix[i][j] = plainTextVector[k];
k++;
}
}
int[][] cipherTextMatrix = new int[len / dimension][dimension];
for (int i = 0; i < len / dimension; i++) {
for (int j = 0; j < dimension; j++) {
int sum = 0;
for (int s = 0; s < dimension; s++) {
sum += keyMatrix[j][s] * plainTextMatrix[i][s];
}
cipherTextMatrix[i][j] = sum % mod;
}
}
StringBuilder cipherTextBuilder = new StringBuilder();
for (int i = 0; i < len / dimension; i++) {
for (int j = 0; j < dimension; j++) {
cipherTextBuilder.append((char) (cipherTextMatrix[i][j] + 'A'));
}
}
return cipherTextBuilder.toString();
}
}
```
该示例中,程序首先从标准输入中读取明文和密钥矩阵,然后调用`encrypt`方法对明文进行加密,并输出密文。`getKeyMatrix`方法将密钥字符串转换成一个矩阵,`encrypt`方法对明文进行分块、矩阵乘法和模运算,得到密文矩阵,并将其转换成密文字符串。