这文章记录一些关于计算机的知识,我觉得程序员应该可以看看,大部分都是抽象,我们在写代码或者在做程序的时候,不用在乎底层知识,我们只需要写,编译器会帮我们处理成想要的样子,我觉得硬件底层是很复杂的一个东西,它不仅仅是编程的逻辑判断,还有物理知识,电的知识,这篇文章是一个个抽象来理解计算机,所以我们不用关心底层什么 ALU,或者 计算等等。

视频

这篇文章不只是记录,也写包括我的理解,可能不是很对,有错误请给提 issues。

感谢CrashCourse 字幕组 以及 Crash Course 你们很棒.

加密(密码学)

为了加密信息,要用加密算法(Cipher),把明文转为密文,除非那知道如何解密,不然密文看起来只是一堆乱码。

把明文转成密文叫 “加密”(encryption)

把密文恢复回明文叫“解密”(decryption)


如今我们叫 “凯撒加密” 的方法,来加密私人信件,他会把信件中的字母,向前移动三个位置。

所以 a 变成 D ,brutus 变成 euxwxv

为了揭密,接收者要知道

  1. 用了什么算法

  2. 用偏移的字母位数

有一类算法叫 “替换加密” “凯撒加密” 是其中一种。

算法把每个字母替换成其他字母,但缺点是:字母出现频率是一样的,如果把 e 改成 x ,那么密文 x 出现频率会很高。可以从统计数据发现规律,进而破译密码

另一类加密算法叫 “移位加密” ,网格排列,从下往上,一次一列。解密的关键是:读取方向和网格大小


随着计算机出现,加密从硬件转往软件,早期加密算法中,应用最广泛的。是 IBM 和 NSA 1997年开发的 数据加密标准

DES(加密标准) 最初用的是 56 bit长度的二进制秘钥,现在已经不行了

AES(高级加密标准)用更长的密钥 - 128位/192位/256位-让暴力破解更加困难。

AES 将数据切成一块一块,每块 16 个字节,然后用密钥进行一系列替换加密和移位加密。加上一些其他操作,进一步加密信息。每一块数据,会重复这个过程10次或以上,

为什么不用 10000 位

这是基于性能的权衡。AES 在性能和安全性间获得平衡,如今 AES被广泛使用,比如 Iphone上加密文件。

用 WPA2 协议在 WIFI 中访问 HTTPS 网站,目前为止,加密技术依赖于发送者和接收者都知道密匙。

发件人用密匙加密,收件人用相同的密匙解密


公开互联网传递密匙给对方

看起来好像不安全,如果密匙被黑客拦截了,不就解密通信了吗?解决方案是 “密钥交换!”

密匙交换是一种不发送密钥,但依然让两台计算机在密钥上达成共识的算法。

“单项函数” 是一种数学操作,任意算出结果,但逆向困难

比喻:将颜色混合在一起很容易,但想知道混了什么颜色很难

Diffie - Hellman 密钥交换 是建立共享密钥的一种方法。

双方用一样的密钥加密和解密消息,这叫 “对称加密”,因为密钥一样。

凯撒加密,英格玛,AES 都是”对称加密“


非对称加密

有两个不同的密钥,一个是公开的,另一个是私有的,人们用公钥加密消息,只有用私钥的人才能解密。

公钥只能加密不能解密,它是 “不对称的”

反过来也是可以,私钥加密,公钥解密。这种做法用于签名,服务器可以用私钥加密。任何人都可以用服务器的公钥解密。

就像 签名 ,私钥持有人,能加密。

目前流行的是 “非对称加密” 技术是 RSA


2023-05-18-17-57-36-f0663f1d-53c2-4e17-a882-f2ef7073cc11

验证服务器的密钥,然后建立临时密钥,然后用对称加密保证通信安全。