哈希算法:
概述: 哈希算法又称为摘要算法。
作用:对任意一组输入数据进行计算,得到一个固定长度的输出摘要。
目的:为了验证原始数据是否被篡改。
特点: 1.相同的输入一定得到相同的输出;
2.不同的输入大概率得到不同的输出。
Java字符串的hashcode()就是一个哈希算法,输入任意字符串,输出固定的4字节int整数。
例子:
当覆写equals()方法时我们必须正确覆写hashcode()方法。
哈希碰撞:
碰撞是不能避免的,因为哈希算法是把一个无限的输入集合映射到一个有限的输出集合,必然会产生碰撞。
安全的哈希算法是满足碰撞概率低并且不能猜测输出。
常用的哈希算法:
哈希算法的输出长度越长,就越难产生碰撞,也就越安全。
以MD5算法为例,看看如何对输入计算哈希:(代码实现如下)
代码运算的结果为:
哈希算法的用途:
1.校验下载文件
2.存储用户密码
3.SHA-1(和MD5完全一样,只需要把算法名称改为SHA-1)
小结:
1.哈希算法可用于验证数据完整性,具有防篡改检测的功能。
2.常用的哈希算法有MD5,SHA-1等。
3.用哈希算法存储口令时要考虑彩虹表的攻击。
对称式加密与非对称式加密的对比
概述:
对称加密:用同一个密钥对密文进行加密和解密。
非对称加密:只有同一个公钥-私钥对才能正常加解密,公钥对密文进行加密,私钥对密文进行解密。
常使用的对称加密算法:
DES:由于密钥长度过短,可以在短时间内被暴力破解,所以已经不安全了。
AES:是目前最广泛的加密算法,比较常见工作模式为ECB模式和CBC模式。
ECB模式:是使用一个固定的16字节长度的密钥,所以是最简单的AES加密模式。(代码实现如下)
CBC模式:时使用一个32字节长度的密钥,并且其中混入了一个IV随机参数,这样对于同一份明文,每次生成的密文都不同。(代码实现如下)
非对称加密的优点:对称加密需要协商密钥,而非对称加密可以安全地公开各自的公钥,在N个人之间通信的时候:使用非对称加密只需要N个密钥对,每个人只管理自己的密钥对。而使用对称加密需要则需要N*(N-1)/2个密钥,因此每个人需要管理N-1个密钥,密钥管理难度大,而且非常容易泄漏。
非对称加密的缺点:运算速度非常慢,比对称加密要慢很多。
以RSA算法为例:密钥长度有 256/512/1024/2048/4096等不同长度,密钥长度越长,密码强度越大,当然计算速度也越慢。(RSA算法代码实现)
代码结果实现:
小结:
1.对称加密算法加密和解密使用的是同一个密钥。
2.非对称加密算法在加密和解密过程中使用的是一对密钥,公钥进行加密,私钥进行解密。