资源简介
使用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
相关资源
- 微博系统(Java源码,servlet+jsp),适
- java串口通信全套完整代码-导入eclip
- jsonarray所必需的6个jar包.rar
- 三角网构TIN生成算法,Java语言实现
- java代码编写将excel数据导入到mysql数据
- Java写的cmm词法分析器源代码及javacc学
- JAVA JSP公司财务管理系统 源代码 论文
- JSP+MYSQL旅行社管理信息系统
- 推荐算法的JAVA实现
- 基于Java的酒店管理系统源码(毕业设
- java-图片识别 图片比较
- android毕业设计
- java23种设计模式+23个实例demo
- java Socket发送/接受报文
- JAVA828436
- java界面美化 提供多套皮肤直接使用
- 在线聊天系统(java代码)
- 基于Java的图书管理系统807185
- java中实现将页面数据导入Excel中
- java 企业销售管理系统
- java做的聊天系统(包括正规课程设计
- Java编写的qq聊天室
- 商店商品管理系统 JAVA写的 有界面
- JAVA开发聊天室程序
- 在linux系统下用java执行系统命令实例
- java期末考试试题两套(答案) 选择(
- JAVA3D编程示例(建模、交互)
- Java 文件加密传输
- java做的房产管理系统
- 基于jsp的bbs论坛 非常详细
评论
共有 条评论