hash算法
其实就是将一段非常长的数据通过hash变换为一个固定长度相对较短的数据,简称“摘要”。
hash算法的种类很多。
hash碰撞
hash可以将任意长度的数据变为一个固定长度的值,算法的精妙在于这个值对于不同的数据还是不一样的,如果不同的数据生成的hash值一样,就是有名的“hash碰撞了”
MD5加密
比如很多网站喜欢将用户的密码经过MD5变换后存储,主要防止数据库泄露后直接查看用户的密码,真正密码比对时对用户输入的密码进行md5变换然后和存储的md5值比较
从密码学上讲加密过程都要对应解密过程,即可以通过密文还原明文,所以以上的密码保护方法不是严格意义上的数据加密解密。
不对称加密:
不对称加密一个重要特点就是:公钥加密的数据私钥可以解密,私钥加密的数据公钥可以解密,
个人理解:不对称加密应该是3部分组成,公钥和私钥还有创建者算法。一般暴露的是公钥和私钥,创建者算法由第三方权威保留。
数字签名是两个过程:
先对数据进行hash摘要,然后对摘要进行私钥加密。
目的:数字签名解密后和数据解密后的明文hash算法后进行对比。这个过程叫做验证签名
个人理解:不管是md5还是不对称加密,可能多种数据加密后出现相同结果,只是概率小,有好处也有坏处。
坏处是,不能唯一的标识一个数据(但数据一般是有格式的,虽然满足这个结果但是数据格式未必就能正确,变得不可识别,可以伪造,但是很难被认可)。
好处是,因为并不唯一,破解得到结果就不确定,需要对所有结果进行验证。而且这个数据的大小是不确定的造成很大的计算量。
而数字签名和不对称加密一起使用:更加有利于对数据正确性的验证。同时增加了伪造数据的难度。
一般的加密过程应该至少有2套公钥和私钥:
1),所以人公用一套公钥用来查看消息(这个消息必须是可以公开的因为所有人可以解密),发送消息每人配一套私钥
2),每个人都有一个公钥和私钥对应2套加密(一个用来加密发送,一个用来解密接收)
密钥套数和人数量(n)的关系:1)是n+1;2)是2n