这文章记录一些关于计算机的知识,我觉得程序员应该可以看看,大部分都是抽象,我们在写代码或者在做程序的时候,不用在乎底层知识,我们只需要写,编译器会帮我们处理成想要的样子,我觉得硬件底层是很复杂的一个东西,它不仅仅是编程的逻辑判断,还有物理知识,电的知识,这篇文章是一个个抽象来理解计算机,所以我们不用关心底层什么 ALU,或者 计算等等。
这篇文章不只是记录,也写包括我的理解,可能不是很对,有错误请给提 issues。
感谢CrashCourse 字幕组 以及 Crash Course 你们很棒.
加密(密码学)
为了加密信息,要用加密算法(Cipher),把明文转为密文,除非那知道如何解密,不然密文看起来只是一堆乱码。
把明文转成密文叫 “加密”(encryption)
把密文恢复回明文叫“解密”(decryption)
如今我们叫 “凯撒加密” 的方法,来加密私人信件,他会把信件中的字母,向前移动三个位置。
所以 a 变成 D ,brutus 变成 euxwxv
为了揭密,接收者要知道
-
用了什么算法
-
用偏移的字母位数
有一类算法叫 “替换加密” “凯撒加密” 是其中一种。
算法把每个字母替换成其他字母,但缺点是:字母出现频率是一样的,如果把 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
验证服务器的密钥,然后建立临时密钥,然后用对称加密保证通信安全。