术语了解
对称性加密
- 对称性密码,也叫共享密钥密码,顾名思义,这种加密方式用相同的密钥进行加密和解密。类似于下面这种形式高级加密标准(AES)为最常见的对称加密算法(微信小程序加密传输就是用这个加密算法的)
- 比如我说一种最简单的对称加密的方法。首先我们知道信息都可以表示成 0/1 比特序列,也知道相同的两个比特序列做异或运算的结果为 0。那么我们就可以生成一个长度和原始信息一样的随机比特序列作为密钥,然后用它对原始信息做异或运算,就生成了密文。反之,再用该密钥对密文做一次异或运算,就可以恢复原始信息。
核心破绽问题
一切对称加密算法的软肋在于密钥的配送。加密和解密用同一个密钥,发送方必须设法把密钥发送给接收方。如果窃听者有能力窃取密文,肯定也可以窃取密钥,那么再无懈可击的算法依然不攻自破。
非对称加密
- 非对称加密的思路就是,干脆别偷偷摸摸传输密钥了,我把加密密钥和解密密钥分开,公钥用于加密,私钥用于解密。只把公钥传送给对方,然后对方开始给我发送加密的数据,我用私钥就可以解密。至于窃听者,拿到公钥和加密数据也没用,因为只有我手上的私钥才能解密。
- 主要功能:在实际应用中,非对称性加密的运算速度要比对称性加密慢很多的,所以传输大量数据时,一般不会用公钥直接加密数据,而是加密对称性加密的密钥,传输给对方,然后双方使用对称性加密算法传输数据。
- 非对称加密还能解决数字签名问题,就是在网络上证明你是你的问题,与加密传输对称性加密的密钥的方法是完全相反的,我们利用私钥加密,然后让接收方用公钥解密,这样就可以实现你是你的问题,因为私钥只有你一个人有,只要我能用公钥来解密,就说明这个信息是你发的
- 但是这种方法会存在一个很大的问题,就是我们如何确定对方是我们要发送的发送方呢?如果别人冒充发送方,那我们不就通过非对称加密算法把我们的密钥给了恶意冒充的人了吗?这里就需要我们有方法来确定对方身份的可靠,在HTTPS里面就有具体的实现,在HTTPS里看
- RSA 加密算法是一种典型的非对称加密算法,它基于大数的因式分解数学难题,它也是应用最广泛的非对称加密算法
消息摘要技术
消息摘要技术
- 原始数据——>Hash(原生数据)——>摘要(哈希值),如果无意之间,原始数据被修改了,变成原始数据1,那么在接收方会利用相同的Hash,来Hash(原始数据1)得到摘要1.通过对比摘要和摘要1,来对比是不是相同的数据,传输的时候的数据为(原始数据+摘要)
常见的摘要算法
- MD5 常常作为文件的签名出现,我们在下载文件的时候,常常会看到文件页面上附带一个扩展名为.MD5 的文本或者一行字符,这行字符就是就是把整个文件当作原数据通过 MD5 计算后的值,我们下载文件后,可以用检查文件 MD5 信息的软件对下载到的文件在进行一次计算。两次结果对比就可以确保下载到文件的准确性。 另一种常见用途就是网站敏感信息加密,比如用户名密码,支付签名等等。随着 https 技术的普及,现在的网站广泛采用前台明文传输到后台, MD5 加密(使用偏移量)的方式保护敏感数据保护站点和数据安全。
加解密算法VS消息摘要
- 加解密算法是可逆的,但是消息摘要是不可逆的