密码(cipher)
计算机术语是一种用于加密或者解密的算法。
密钥(key)
密钥是一种参数,它是在使用密码算法过程中输入的参数。同一个明文在相同的密码算法和不同的密钥计算下会产生不同的密文。
明文(plaintext)/密文(ciphertext)
明文是加密之前的原始数据,密文是通过密码运算后得到的结果成为密文。
对称密钥(Symmetric-key algorithm)
又称为共享密钥加密,对称密钥在加密和解密的过程中使用的密钥是相同的,常见的对称加密算法有DES、3DES、AES、RC5、RC6。
优点是计算速度快。
缺点是双方共享同一个密钥不安全,服务端密钥过多管理难度大。
非对称密钥(public-key cryptography)
又称为公开密钥加密,服务端会生成一对密钥,一个私钥保存在服务端,仅自己知道,另一个是公钥,公钥可以自由发布供任何人使用。
客户端的明文通过公钥加密后的密文需要用私钥解密。非对称密钥在加密和解密的过程的使用的密钥是不同的密钥,加密和解密是不对称的。
常见的非对称加密有RSA,非对称加解密的过程:
1.服务端生成配对的公钥和私钥
2.私钥保存在服务端,公钥发送给客户端
3.客户端使用公钥加密明文传输给服务端
4.服务端使用私钥解密密文得到明文
数字签名(Digital Signature)
数据在浏览器和服务器之间传输时,有可能在传输过程中被冒充并把内容替换数字签名就是用于验证传输的内容是不是真实服务器发送的数据,发送的数据有没有被篡改过,它就干这两件事,是非对称加密的一种应用场景。
不过他是反过来用私钥来加密,通过与之配对的公钥来解密。
1.服务端将报文经过Hash处理生成摘要信息,摘要信息通过私钥加密生成签名,服务端把签名和报文一起发送给客户端
2.客户端用公钥将签名解密,如果能正确解密出摘要信息,那么确定是服务端发送
3.客户端将报文同样经过Hash处理生成的摘要信息与解密出来的摘要信息作比对,如果完全一致则内容未被篡改
数字证书(Certificate Authority)
服务器发送给客户端的公钥可能被替换,数字证书机构将真实的服务器公钥和网站信息通过自己的私钥加密发送给客户端。
加密盐
通常为了安全,用户的密码会以通过不可逆的hash算法产生的密文来保存,但是由于用户可能使用相同的密码,这样产生的密文也会相同,
一旦保存密码的数据库泄露,攻击者很容易找到相同的密码来降低破解难度。因此,将密码字符串和随机生成的盐值组合进行加密可以更好的掩饰密文数据。