https 学习笔记

参考 : 

http://www.cnblogs.com/JimmyZhang/archive/2008/10/02/Cryptograph.html

https://blog.csdn.net/Jogger_Ling/article/details/60576625

2 架机器要通信, 信息很容易被窃听或串改, 需要一套加密机制来保证安全.

通信安全需要具备 3 个条件 

1. 信息不可以被外人解读. 别人可以拦截看的到信息,但是信息都是一堆乱码,看不出含义.

2. 信息不可以被串改, 拦截者一旦修改了内容, 接收方会发现到信息途中被人修改了, 这样接收方就不需要信任信息了.

3. 接收方必须确认发送方, 比如 A 发送消息给 B, B 收到信息可以确定这个信息真的是 A 发送来的,而不是其它人假冒了它. 

以上就是通信的基本安全. 没办法满足任何一个, 通信就算失败了. 

要安全就加密咯,我们来聊聊加密。

这里提到 3 个和加密有关的方法. 

1. 对称加密 

对称加密很简单.需要这几件东西 : 

1. 信息

2. 加密/解密算法 

3. 密钥 (password)

用程序来表达是这样的 

var encrypted_message = encrypt(message, "password"); 

那解密就是这样 

var message = decrypt(encrypted_message , "password");

2. 非对称加密 

这个比较特别它有 2 个 password 叫 公钥,私钥

1. 信息

2. 加密/解密算法 

3. 公钥

4. 私钥

它的规则比较特别, 如果用公钥来加密,那么解密的时候要用私钥才能解开 

var encrypted_message = encrypt(message, "public password"); 

var message = decrypt(encrypted_message , "private password");

或则反过来, 私钥加密,公钥解密也是可以.

3.散列算法 

这个算法不是用来加密解密的, 它只有加密的功能,却没有解密的功能. 

1. 信息

2. 算法

它的特点是这样的, 不管你的信息量多大, 经过这个算法都会产生出固定长度的字符串. 

没有任何一种方法可以把这字符串还原回原本的信息. 

另一个特点是, 它生成出来的字符串是唯一的, 如果  "message" 变成 "egassem" 的话,那么你再也找不到任何一个信息能变成 "egassem", 就只有 message 能变成 "egassem".

而且每一次 "message" 就只能变成 "egassem" 不会变成其它的.

你第一次接触的话,可能会很好奇这东西有啥用. 

我举个典型的例子. 用户的密码保存. 

我们都知道用户在申请的时候回把 username password 告诉网站, 如果网站把 password 直接保存在数据库中是很危险的。

因为如果一不小心数据库被黑掉了, 用户的密码就被公开了,用户虽然使用很多网站但是密码通常都是放一样的,所以一旦密码被公开,那么其所有网站的资料都会变得很危险. 

所以一个好的网站是不应该直接把密码存放在数据库中的. 那这时我们就可以使用这种散列算法把密码都变成一堆乱码. 而只要在用户登入的时候把 password 通过算法再次生成出乱码字符串,对比字符串我们依然可以确定用户输入密码的正确性. 

p.s 这里只是讲解散列的运用,真正的密码保存除了散列我们还会加入盐 (salt) 的概念,防止彩虹表的攻击, 这里就不展开了.

通信安全就是靠这 3 件法宝来完成的. 

没力气写了... 

猜你喜欢

转载自www.cnblogs.com/keatkeat/p/9265930.html
今日推荐