4 多表代替密码之Hill 密码 2实现
该解密方法的KEY 不是一个数或者一段字符串,而是一个矩阵, 比如有个3*3的KEY:
那么如果我们要加密一个长度为N的字符串, 那么把N除以3,分成M个3个字母组成的小段, 对每个小段尽心加密:
1. 将明文分成M个小段:{{p1,p2,p3},{p4,p5,p6}...{..pN}}
2. 对每个小段尽心加密: c1 = (k11*p1 + k21*p2 + k31*p3)
c2= (k12*p1 + k22*p2 + k32*p3)
c3= (k13*p1 + k23*p2 + k33*p3), 也就是:
密文C:[c1,c2,c3] = [p1,p2,p3] * KEY mod 26,
这样就可以得出Hill加密的算法是:
C = P*Kmod26;
那么对应的解密算法就是:
P = C * K-1mod26.
下面是JAVA 实现:
package com.owner.replace.multi; import Jama.Matrix;
import com.owner.util.matrix.MatrixUtil; import java.text.NumberFormat; /**
* Created by wellmax on 2015/10/19.
*/
public class Hill {
private final static Matrix KEY = new Matrix(new double[][]{{17,17,5},{21,18,21},{2,2,19}});
private final static MatrixUtil MU = new MatrixUtil(KEY);
private final static Matrix N_KEY = MU.inverse();
private static int charToInt(char c){
return (int)c - 97;
} public String encrypt(String input){
char[] chars = input.toCharArray();
int[] numbers = new int[chars.length];
for (int i = 0 ; i < chars.length ; i++){
numbers[i] = charToInt(chars[i]);
}
int[] encrypts = MU.rowMultiplyMatrix(numbers,MU.getMatrix());
for(int i = 0 ; i < encrypts.length ; i++){
chars[i] = (char)(encrypts[i]+97);
}
return new String(chars);
}
public String decrypt(String input){
char[] chars = input.toCharArray();
int[] numbers = new int[chars.length];
for (int i = 0 ; i < chars.length ; i++){
numbers[i] = charToInt(chars[i]);
}
int[] decrypts = MU.rowMultiplyMatrix(numbers,N_KEY);
for(int i = 0 ; i < decrypts.length ; i++){
chars[i] = (char)(decrypts[i]+97);
}
return new String(chars);
} public static void main(String[] args){
Hill hill = new Hill();
String encrypt = hill.encrypt("paymoremoney");
System.out.println(encrypt);
String decrypt = hill.decrypt(encrypt);
System.out.println(decrypt);
}
}
对于3*3的KEY, 决定一个明文字母最后加密结果的因素:
1. 附近的2个字母;
2. KEY某一列的值
那么对于单个字母在密文中出现的频率来说是完全没有规律的, 同样的对于3*3的KEY, 双字母对出现的频率也是不定的。那么随着KEY维度的不断增大, 安全性就不断提高,因为不能通过字母或者字母对出现的频率来分析KEY的值。这对其他之前的加密来说无疑是质的提高。
但是这种加密仍是较易破解的, 典型的一个方法如下:
1. 不是所有的矩阵都有这种算法的逆矩阵, 这样KEY的取值范围就缩小了。
2. 可以通过验证步奏1中猜测的KEY是否正确, 我们通过猜测的KEY破解的密文可以用来判断KEY的正确性。
通过这两步就能较易的破解出KEY。
-Wellmaxwang
4 多表代替密码之Hill 密码 2实现的更多相关文章
- 4 多表代替密码之Hill 密码_1 矩阵工具类
在说明Hill加密之前要先复习线性代数的知识,主要是关于矩阵的一些运算和概念. 一.矩阵的逆: 定义方阵M的逆矩阵应该满足M*M^-1==I,其中I是单位矩阵,比如: 但是这个地方是对英文字母进行加密 ...
- javascript实现playfair和hill密码算法
时至期末,补习信息安全概论作业.恰巧遇古典密码学算法中的playfair算法和hill算法,用javascript语言实现起来是在有趣,边查百度边编码,顺便好好补习一下javascript基础. pl ...
- Hill密码解密过程(Java)
Hill密码是一种传统的密码体系.加密原理:选择一个二阶可逆整数矩阵A称为密码的加密矩阵,也就是这个加密体系的密钥.加密过程: 明文字母依次逐对分组,例如加密矩阵为二阶矩阵,明文就两个字母一组,如果最 ...
- 信息安全-2:python之hill密码算法[原创]
转发注明出处:http://www.cnblogs.com/0zcl/p/6106513.html 前言: hill密码算法我打算简要介绍就好,加密矩阵我用教材上的3*3矩阵,只做了加密,解密没有做, ...
- Hill密码
希尔密码(Hill Password)是运用基本矩阵论原理的替换密码,由Lester S. Hill在1929年发明.每个字母当作26进制数字:A=, B=, C=... 一串字母当成n维向量,跟一个 ...
- Oracle创建表空间、用户名、密码步骤教程
第一步,以最高级别 SYSDBA 身份登录数据库 cmd 进入命令行 登录方式一: C:\Documents and Settings\Administrator>sqlplus sys/sys ...
- ubuntu系统下mysql重置密码和修改密码操作
一.忘记密码后想重置密码 在介绍修改密码之前,先介绍一个文件/etc/mysql/debian.cnf.其主要内容如下图: 里面有一个debian-sys-maint用户,这个用户只有Debian或U ...
- ssm中通过ajax或jquer的validate验证原密码与修改密码的正确性
一.ajax 1. <script type="text/javascript"> //验证原密码1.ajax,正则 var ok1=false,ok2=false,o ...
- C#--用户密码处理------混淆密码加密
近期刚好做新框架的用户数据安全这块 密码的保护措施:混淆加密--------------------------------拙见----------贴上代码--请指教 1:生成混淆数据,---存入数据 ...
随机推荐
- 搭建Kafka集群(3-broker)
Apache Kafka是一个分布式消息发布订阅系统,而Kafka环境往往是在集群中配置的.本篇就对配置3个broker的Kafka集群进行介绍. Zookeeper集群 Kafka本身提供了启动了z ...
- org.springframework.jdbc.UncategorizedSQLException异常
用到了mysql的TRUNCATE函数,这个关键字对spring事务有影响,最后换成了ROUND函数
- 深入剖析tomcat 笔记——第8章 载入器
深入剖析tomcat 笔记 目录:
- ios基础篇(二十三)—— 定时器NSTimer与图片的自动切换
一.NSTimer NSTimer是一个能在从现在开始到后面的某一个时刻或者周期性的执行我们指定的方法的对象.可以按照一定的时间间隔,将制定的信息发送给目标对象.并更新某个对象的行为.你可以选择在未来 ...
- Android6.0获取权限
照着<第一行代码>打代码,然并卵,感叹技术进步的神速.最后提醒一点:IT类的书籍一定要注意出版时间!出版时间!出版时间!重要的事情说三遍 问题出在android6.0的权限获取问题上,以前 ...
- C语言模块化编译介绍
C语言模块化编译介绍 模块化编程的概念 所谓模块化变成(多文件开发),就是多文件(.c文件)编程,一个.c文件和一个.h文件可以被称为一个模块. 头文件开发的注意事项: 1)头文件中可以和C程序一样引 ...
- IOS多媒体
概览 随着移动互联网的发展,如今的手机早已不是打电话.发短信那么简单了,播放音乐.视频.录音.拍照等都是很常用的功能.在iOS中对于多媒体的支持是非常强大的,无论是音视频播放.录制,还是对麦克风.摄像 ...
- NoSQl简介(转)
NoSQL,全称是“Not Only Sql”,指的是非关系型的数据库.这类数据库主要有这些特点:非关系型的.分布式的.开源的.水平可扩展的.原始的目的是为了大规模web应用,这场全新的数据库革命运动 ...
- P53 T3
为方便旅客,某航空公司拟开发一个机票预定系统.旅行社把预定机票的旅客信息(姓名.性别.工作单位.身份证号码.旅行时间.旅行目的地等)输入进入该系统,系统为旅客安排航班,印出取票通知和账单,旅客在飞机起 ...
- Win8 传统桌面下无法上网的解决方法
Win8 很酷,就连出现的问题也都酷得不行~ 之前遇到的一些问题与解决方法,避免重新安装 1. Word 2013下, 输入法突然秀逗, 经常按了一个键后, 死循环输入该字符直到死机 解决方法: 进入 ...