今天天气不是很完美,阴沉、冷,感觉特别的压抑。记得当年学习 C 语言的指针时,选择了一个阳光明媚、风和日丽的晴天去学习的。本来这周打算把 AES 的原理学习一下,但是因为天气不好,再加上昨天没有休息好,所以改期吧。为什么 AES 要选择一个天气好、心情好、前一天早睡的日子学呢?因为涉及的数学知识太多了,上次就是因为没有做好准备,整个 AES 的流程没看完,又在数学公式花了很多时间。因此,不具备天时、地利和人和,我还是按兵不动的好,因为我觉得这样的一个知识点应该至少在一天应该能梳理下来的好。
今天粗略的把分组密码的工作模式看完了,当然了只是粗略的看完了,没有进行细化,也没有依靠自己的理解把相应的流程图和数学公式写出来。因为这部分内容为预计要分四次去完成,中间需要消化的过程。
分组密码的出现可以算是现代密码的开始,而分组密码又可以用来构建哈希函数、消息验证码等,这样看来分组密码在现代密码中有着很重要的地位,是基础的基础(基础并不意味着简单,而是意味着重要)。既然分组密码有多种不同的应用场景,那么它就有不同的工作模式,其工作模式分为如下几种:
- 电子密码本模式 —— ECB
- 密文分组链接模式 —— CBC
- 输出反馈模式 —— OFB
- 密文反馈模式 —— CFB
- 计数器模式 —— CTR
后三种模式又将分组密码原理运用在了序列密码的加密当中。分组密码随着工作模式的改变可以运用到不同的场景中,有的适合用于数据库加密、有的适合进行完整性的校验。写到这里,我不得不说一点,虽然现在很多语言都有现成的加密类库,其实如果对基本的原理不能很好的掌握的话,在进行技术选型时就会出现比较盲目的做法。做程序员,好歹要“知其然知其所以然”!
这几种分组密码的工作流程我后期会画出流程图进行分享。希望可以共同提高。
最后需要感叹一下的是,那些计算机先驱们给像我这样的小辈创造了太多的知识供我们来学习,他们偏执的哲学思想(这里的偏执是褒义,了解一下 Linus 对操作系统宏内核和微内核设计哲学就多少会有些体会了)、奇妙的思路、严谨的设计、追求完美的态度真是值得我们学习。