4.2 Hash算法
两个问题:隐私 和 快速对账
摘要算法:世界上没有两片完全相同的叶子,提取叶子的特点就是摘要
-
hash算法:可以将任意数据 生成 固定长度 的 16进制 字符串 【在线工具】
并且,只要数据一样,那么不管计算多少次都会获得同一个 16进制 字符串
-
常见hash算法:md5,sha1,sha256,sha512 等,都是摘要算法(Message Digest)
如:
注意:比特币使用的是 sha256 算法
-
碰撞可能性:不同内容生成同一个hash值的可能性
比特币用sha256算法:
2的256次方 -> 1.157920892373162e+77 -> 比宇宙中原子的数量还多
转成 二进制 就是 256位的数值 (1个十六进制数 得用 4个二进制数 表示)
64个十六进制数
96DBE8599CCA83C9487B39FF14D6A224B488E9AC8A676DEBCC0DFAC53615208B
|256个二位数
1001011011011011 1110100001011001
1001110011001010 1000001111001001
0100100001111011 0011100111111111
0001010011010110 1010001000100100
1011010010001000 1110100110101100
1000101001100111 0110110111101011
1100110000001101 1111101011000101
0011011000010101 0010000010001011 不可逆
- 暴力穷举 【在线工具】
- 小结:为了安全起见,现在一般使用 sha256 算法
4.3 密码学
4.3.1 对称加密
- 使用 同一个密钥 进行 加密 和 解密,这种加密方法称为 对称加密,也称为 单密钥加密
- 算法:DES、3DES、AES、TDEA、Blowfish、RC2、RC4、RC5、IDEA、SKIPJACK
-
特点:
加解密使用 相同 秘钥
高效,适用于大量数据的加密场景
算法公开,安全性取决于秘钥大小,但秘钥越大效率越低,需要权衡在安全和效率中做权衡 -
缺点:
算法本身安全,但使用场景不够安全,因为解密和加密都是同一个秘钥
4.3.2 非对称加密
使用 匹配的一对密钥 来分别进行加密和解密,这两个秘钥是公开密钥(public key,简称公钥)和私有密钥(private key,简称私钥)
注意:公钥加密的数据 只能 用 对应的私钥解密,同理,私钥加密的数据 只能用 对应的公钥解密
-
算法:RSA、ECC、Elgamal、背包算法、Rabin、D-H 等
- RSA算法,网易公开课的介绍视频 链接
- ESS算法,椭圆曲线算法(比特币,巧妙避开美国NSA后门,V神认为是巧合)
-
用法:
-
准备工作:
1.生成一对匹配的 私钥 和 公钥 (ps:公钥其实是根据私钥生成的)
2.将公钥公布给外界
-
-
用法1. 公钥加密 - 用来针对互联网上加密数据传递
Linda 用
James的公钥
对数据进行加密,然后发给 James,James用自己的私钥解密
> 因为一个公钥加密的数据 只有 对应的 私钥才能解密,所以密文很安全
> 补充:如果要在网络上相互发送密文,可以让对方也发对方的公钥过来,用对方的公钥来加密
-
用法2. 私钥签名 - 目的是为了将明文公布给别人,同时证明是自己发的;也可以防止明文被篡改。
第一步: James 用
James的私钥
对明文的hash值进行加密,把密文(签名)和明文一起发给 Linda
**第二步:** Linda 用 `James的公钥` 进行解密,解密后的明文hash值 和 接收到的明文的hash值进行对比,如果一样则是 James 发的
-
特点:
安全性高
加解密复杂,效率低
4.3.3 小结
对称加密:加密与解密 使用的是同样的密钥,所以速度快,但由于需要将密钥在网络传输,所以安全性不高
非对称加密:使用唯一匹配的公钥与私钥,所以安全性高,但加密与解密速度慢
解决的办法:将
对称加密的密钥
使用非对称加密的公钥
进行加密,然后发送出去,接收方使用私钥
进行解密得到对称加密的密钥
,然后双方可以使用对称加密来进行沟通