Hill(希尔)密码算法的java实现

实验要求代码实现hill算法,中间遇到了一些问题,主要是n纬数组的实现问题,因为一开时并不知道具体输入的密文有多少位,所以没办法提前设置加密矩阵的值。后来想到用arraylist 和 list 以及对象生成的方法解决。

首先了解一个hill密码的概念:

希尔密码(Hill Cipher)是运用基本矩阵论原理的替换密码,由Lester S. Hill在1929年发明。

每个字母当作26进制数字:A=0, B=1, C=2... 一串字母当成n维向量,跟一个n×n的矩阵相乘,再将得出的结果MOD26。

比如 密文为ABC 那么他对应的矩阵为一列三行的

0

1

2

然后我们设置加密矩阵,例如 //注意这里的矩阵元素值范围在1到26之间

18     6      21

1       10    26

23     8      11

所为加密过程就是一个3x3的矩阵和一个1x3的矩阵相乘的结果再模除26。

看起来貌似比较简单,因为我们事先就确定用3位的密码,然而当这个密文元素个数为n时,就不同了。

我的解决办法是,用arraylist来作为加密矩阵的表达类型,而arraylist里包含的元素类型为一个个对象(object),然后给当前java类加一个list类型的属性,这样当我确定了矩阵的维度之后,就可以在赋具体元素值时初始化数组来得到一个完整的n维矩阵(其中每个矩阵元素值在1到26之间随机生成)。具体代码如下:

import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;

public class Hill {
	List a;
	public static void main(String[] args) {
		Scanner input = new Scanner(System.in);
		String clear = input.nextLine();
		int n = clear.length();
	
		encry(n,clear);
	}
	public static void encry(int n ,String text) {
		int[] result = new int[n];//密文对应数组
		int[] origin = new int[n];//原密码对应数组
		ArrayList l = new ArrayList();//加密矩阵
		for(int i=0;i
可运行验证。

你可能感兴趣的:(信息安全)