希尔密码,是运用基本矩阵论原理的替换密码,由Lester S. Hill在1929年发明。
原理非常简单,首先确定一个密钥,这个密钥为n × n的矩阵,并且必须是可逆的。然后将字符与数字创建映射表,一个字符对应一个数字。加密时,将明文分割为n个字符一组,在映射表中找到字符对应数字,每一组字符就变为一个1 × n 的矩阵,将这个矩阵与密钥相乘的结果模72,再在映射表中找数字对应字符转化,就得到了密文。解密时,先将字符转数字,n个一组,形成1 × n 的矩阵,把这些矩阵与密钥的逆矩阵分别相乘,左乘还是右乘需要与之前一致,将乘得的结果加72的倍数转为正数后模72,将这些数字通过映射表转为明文。
下面直接上代码,有一些自己实现的矩阵类Matrix_c和方法,请移步
Java实现整数矩阵的基本运算与初等变换(部分)
import java.util.*;
public class Hill {
Character[] x = {
'A','B','C','D','E','F','G','H','I','J','K','L','M','N','O',
'P','Q','R','S','T','U','V','W','X','Y','Z','a','b','c','d','e','f','g','h','i','j','k','l','m','n',
'o','p','q','r','s','t','u','v','w','x','y','z',',','.','\'','?','!','@','-','+','*','/','1','2','3','4',
'5','6','7','8','9',' '};
//创建映射表
HashMap<Character,Integer> wordMap = new HashMap();
HashMap