密码学学习一-古典密码学

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

©️2020 CSDN 皮肤主题: 技术黑板 设计师:CSDN官方博客 返回首页