资源简介
使用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
相关资源
- 2017达内Java视频全套,ts高清文件
- ZXing-core-3.3.0.jar
- java龟兔赛跑小程序
- java实现网络竞拍系统有界面
- JTable 动态添加数据
- 图书管理系统JavaC/S架构
- java书籍Java从入门到精通(第三版)
- 达梦数据库的连接配置
- java风扇小程序
- Java版查找并打印有向图中的所有环路
- 详细的java学习路线_规划_步骤
- 旅行代理管理系统软件设计
- kafka java maven
- 手机QQ2012java通用版
- Java编写的MVC模式小系统
- java制作的输入法
- Eclipse IDE for Java EE Developers
- Java网络白板197032
- JAVA计算器小程序多进制计算、转换
- Sun_Java程序员认证考试题库
- MAVEN RSA签名生成验签
- Java编的生日祝福软件源代码
- java+SQL人事管理系统
- java多边形填充扫描线种子算法
- MQTT JAVA jar包 wmqtt.jar
- javajsp网页登陆
- 利用JAVA文件读写流编写的学生点名系
- JAVA课设迷你计算器设计
- 使用jsp+servlet+mysql+tomcat的java web,很简
- word转pdf安装软件
评论
共有 条评论