凯撒密码

凯撒密码就是一种替换密码,将字表中的一个字符用另一个字符替换,通过将当前字母平移 n 位后得到新的字符就完成了一次加密。
解密的话就在再平移回去就好了。看着就不安全,但这毕竟是早期的密码算法。

密码学基础篇----密码算法
密码学基础篇----密码算法

词频就是每个字母使用的频率,如下图
密码学基础篇----密码算法
我们可以看到其中字母E的使用频率最高,所以我们先用E去尝试
也就是说m=h, j=e, q=l, t=o,得到 hello 感觉没毛病 继续
后面得到 cryptography 翻译一下 就是密码学
所以 hello cryptography 你好密码学。

转子密码机

随着机械工艺和电子技术的发展以及电报和无线电通信的出现,加密装置得到了突飞猛进的提高。 转子密码机是军事密码学上的一一个里程碑。这种密码机是在机器内使用不同的转子来替换字母,它提供了很高的复杂性,从而很难**。然而,转子密码机最后还是被历史上最著名的密码机所取代,即德国的Enigma机。Enigma机具有3个转子、一个连接板和一个反射转子。

密码学基础篇----密码算法
在加密开始之前,消息的产生者会将Enigma机配置为其初始设置。操作员键入消息使用另一个字母来替代原字母,并向操作员显示该字母。将转子旋转预定的次数,从而使另一个不同的字母来替代原来的字母。因此,如果操作员键入的第一个字符为T,那么机器可能把它替换成M,操作员就会在低上写下字得M.接着,操作员会继续转转子设置下一个字母。输入完成后发过去再由那边的人,通过转子机解密。

序列密码

Enigma与凯撒密码-样属于一种换位密码,很容易被**,例如蛮力攻击或穷尽密码搜索,攻击者通过信道窃听获得密文,在恺撒密码中,
密匙就是字母表平移的字数。由于字母表只有26个字母,因此加密算法只有0-25共26种。虽然Enigma是随机换位,但是依然能够通过数字字母频率分析出结果。
因此,为了更安全的加密,出现了序列密码这种加密方法,序列密码的特点是将明文和**进行异或运算。例如:明文a, ASCL码为97,二进制码01100001;密匙为B,ASCLL码为66,二进制为01000010,然后按位异或(半加运算)。

密码学基础篇----密码算法
序列码用于单独加密每个位,它是通过将密匙序列中的每个位与每个明文相加实现的。

序列码最大的问题有两点:
1、密匙长度必须和明文长度一致,如果要加密20M的明文则需要一个20M的密文。
2、序列码容易被篡改。

分组密码

分组密码是将明文消息编码表示后的数字(简称明文数字)序列,划分成长度为n的组(可看成长度为n的矢量),每组分别在**的控制下变换成等长的输出数字(简称密文数字)序列。

ECB 模式(电子密码本模式)

ECB模式是将明文消息,分成固定大小的分组,当最后一个分组小于分组长度的时候,需要用特定的数据进行填充以至于长度等于分组长度,每个分组的加密和解密都是独立的,可以并行进行。但是其安全性较低。

密码学基础篇----密码算法
密码学基础篇----密码算法

CBC模式(密码分组链接模式)

CBC模式中的第一个分组需要用初始化向量IV (一个随机的且长度为一个分组长度的比特序列)进行异或操作再进行加密,而后面的每一个分组都要先和前个分组加密后的密文分组进行异或操作,然后再加密。加密是连续的,不能进行并行操作。无法对单独一个中间的明文分组加密:对初始化向量没有加密。当CBC模式中的密文分组有一个分组损坏,只要密文分组的长度没有发生变化,解密时最多会有两个分组受到数据损坏的影响。当CBC的密文分组中有一些比特缺失了,导致密码分组的长度发生变化,此分组发生错位,在缺失比特位置之后的密文分组也就无法全部解密了

密码学基础篇----密码算法
简单来说就是引用一个初始化向量IV,和自己的明文进行异或的加密操作,得到一个加密密文,然后再用这个加密密文和后面的明文进行异或运算得到另一组加密密文。有了前一组才有下一组所以不能并行进行。一个环节错误或者丢失都有影响。

CFB模式(密文反馈模式)

CFB模式是将前一个分组的密文加密后和当前分组的明文进行异或操作生成当前分组的密文,第一个明文分组通过初始化向量IV进行加密再与之进行异或操作得到第一个密文分组。 CFB模式中有密码算法产生的比特序列成为**流(在CFB中密码算法相当于伪随机数生成器),在CFB中分组密码算法在解密时仍执行加密操作(因为**流通过加密生成)。对CFB模式可实施重放攻击。

伪随机数就是可以**的,通过取0~1的数随机扩大n倍产生。

密码学基础篇----密码算法

就是第一组时先引入一个变量,将变量进行加密变成密文,再将得到的密文和分组一的明文进行异或的加密运算,得到第一组的密文。后面的操作也类似。

OFB模式(输出反馈模式)

ofb模式是将明文分组和密码算法的输出进行异或操作来产生密文分组的,也需要引用初始向量。密码算法的输出会反馈到密码算法的输入中,并非通过密码算法加密明文分组的,而通过将明文分组和密码算法的输出进行XOR来产生密文分组(与CFB的区别在于密码算法的输入)CFB是对密文分组进行反馈,必须按顺序进行加密;OFB是对**流进行加密(生成**流与XOR运算可以并行)

密码学基础篇----密码算法
就是先引用一个初始向量,对其进行加密再和第一组明文进行异或运算得到第一组的密文,后面一组又和引入的初始向量加密后得到的密文再加密得到新的密文,再和第二组的明文进行异或运算得到得二组的密文。。。

CTR模式(计数器模式)

通过将逐次累加的计数器进行加密来生成**流每个分组对应一个逐次累加的计数器每次加密都会生成一个不同的值(nonce)作为计数器的初始值,且在每次加密时都必须不同在初始值之后为分组***,会逐次累加在CTR中如果密文分组有1bit被反转,解密后的明文中所对应的比特会被反转,该错误不会放大。

密码学基础篇----密码算法

总结

密码学基础篇----密码算法

相关文章: