• 大小: 54KB
    文件类型: .zip
    金币: 1
    下载: 0 次
    发布日期: 2021-06-05
  • 语言: Java
  • 标签: Hill  加密算法  java  

资源简介

使用Java实现的Hill加密程序,有GUI,可生成随机密钥矩阵,可以统计字母频率。内附可执行程序及源码。

资源截图

代码片段和文件信息

package en_decrypt.hill;

import java.io.IOException;

/**
 * Description:Hill算法的实现类
 */
public class Hill{

public static int[][]inverseMatrix;//密钥矩阵的逆设置此变量是为了方便显示

/**
 * Description: 使用hill算法进行加密
 *
 * @param plainText 明文字符串
 * @param key 加密密钥:3*3 的二维整型数组
 * @return:String 密文
 * @throws IOException 输入异常
 */
public static String encrypt(String plainText int[][] key) throws IOException {
//检验明文字符串是否为空
if (plainText == null || plainText.trim().isEmpty()) {
throw new IOException(“输入的明文为空“);
}
//去除明文非字母字符
plainText=plainText.replaceAll(“[^a-zA-Z]“ ““);

//根据明文和加密密钥得到密文
String cipherText = convert(plainText key);
return cipherText;
}

/**
 * Description: 使用hill算法进行解密
 *
 * @param cipherText 密文字符串
 * @param key 加密密钥:3*3 的二维整型数组
 * @return:String 明文
 * @throws IOException 输入异常
 */
public static String decrypt(String cipherText int[][] key) throws IOException{
// 检验明文字符串是否为空
if (cipherText == null || cipherText.trim().isEmpty()) {
throw new IOException(“输入的明文为空“);
}
//去除明文非字母字符
cipherText=cipherText.replaceAll(“[^a-zA-Z]“ ““);

//根据明文和加密密钥得到密文
Matrix matrix = new Matrix(key);
// Float[][] inverse = matrix.inverse();
// inverseMatrix = matrix.getRealInverse(inverse);
inverseMatrix =matrix.getInverse();
String plainText = convert(cipherText inverseMatrix);
return plainText;
}

/**
 * Description: hill算法的核心每3个字符与密钥矩阵相乘
 *
 * @param rawText 未处理的文本
 * @param key 3*3密钥矩阵
 * @return:String 处理后的文本
 */
private static String convert(String rawText int[][] key)
{
StringBuilder str = new StringBuilder(rawText.toUpperCase());
StringBuilder result = new StringBuilder();
Matrix keyMatrix = new Matrix(key);
// 加/解密
for (int i = 0; i < str.length(); i += 3)
{
if (i + 1 >= str.length()) {
str.append(‘X‘);
}
if (i + 2 >= str.length()) {
str.append(‘X‘);
}
char ch1 = str.charAt(i);
char ch2 = str.charAt(i + 1);
char ch3 = str.charAt(i + 2);
// 构造字符矩阵
int[][] data = new int[3][1];
data[0][0] = ch1 - ‘A‘;
data[1][0] = ch2 - ‘A‘;
data[2][0] = ch3 - ‘A‘;
Matrix charMatrix = new Matrix(data);

try {//矩阵乘法结果模26
Matrix multiplyMod = keyMatrix.multiply(charMatrix);
multiplyMod.mod(26);
for (int j = 0; j < 3; j++){
char m = (char) (‘A‘ + multiplyMod.getData()[j][0]);
result.append(m);
}
} catch (IOException e) {
e.printStackTrace();
}

}
return result.toString();
}
}

 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----
     目录           0  2018-04-20 19:02  Hill\
     文件       48245  2017-12-16 20:37  Hill\Hill.jar
     目录           0  2018-04-20 19:01  Hill\src\
     目录           0  2018-04-20 19:02  Hill\src\en_decrypt\
     目录           0  2018-04-20 19:01  Hill\src\en_decrypt\hill\
     文件        2775  2017-12-10 13:43  Hill\src\en_decrypt\hill\Hill.java
     文件        9354  2017-12-13 10:42  Hill\src\en_decrypt\hill\Matrix.java
     文件         523  2017-12-08 16:49  Hill\src\en_decrypt\hill\Test_Hill.java
     目录           0  2018-04-20 19:02  Hill\src\gui\
     文件        9573  2017-12-16 20:35  Hill\src\gui\HillGUI.java
     目录           0  2018-04-20 19:01  Hill\src\tools\
     文件        1685  2017-12-08 18:59  Hill\src\tools\HistogramBarChart.java
     文件        2560  2017-12-08 18:59  Hill\src\tools\Spectrum.java
     文件        2359  2017-12-10 12:37  Hill\src\tools\Tools.java

评论

共有 条评论