1 替换法
使用固定信息,将原文替换成密文
1.1 单表替换
单表替换的原文和密文是同一张表
如原文密文关系如下
a->b
b->c
c->d
d->e
e->f
则bee的密文就是cff
1.2 多表替换
多表替换的原文和密文存在多张表中
表1:
a->b
b->c
c->d
d->e
e->f
表2:
a->c
b->d
c->e
d->f
e->g
原文:bee
密钥:122
密文:cgg
2 移位法
按照字母表位置进行移动,典型的加密算法是凯撒加密
2.1 凯撒加密
@Test
public void testEncipher() {
// 右移3位加密
System.out.println(encipher("Hello World", 3));
}
public String encipher(String str, int offset) {
if (StringUtils.isEmpty(str)) {
return null;
}
// 把字符串变成数组
char[] chars = str.toCharArray();
StringBuilder builder = new StringBuilder();
for (char c: chars) {
builder.append(((char) (c + offset)));
}
return builder.toString();
}
输出:Khoor#Zruog
3 古典密码学破解方式
频率分析法:概率论
频率分析基于如下原理:在任何一种书面语言中,不同的字母或字母组合出现的频率各不相同。而且,对于以这种语言书写的任意一段文本,都具有大致相同的特征字母分布。比如,在英语中,字母E出现的频率很高,而X则出现得较少。类似地,ST、NG、TH,以及QU等双字母组合出现的频率非常高,NZ、QJ组合则极少。英语中出现频率最高的12个字母可以简记为“ETAOIN SHRDLU”。
在一个简单的替换密码中,明文中的每一个字母都被另一个字母替换,而且且明文中相同的字母在转换为密文时总是被同一个字母所替换。比如,所有的e都会被替换成 X.一个含有大量X的密文消息会向密码破译者暗示X替换e