常规的加密算法

传统密码学

  • 字符替换

特点:算法保密

公钥密码学

  • 对称加密算法:DES,AES

  • 非对称加密算法:RSA

特点:算法公开,参数保密

密码学的基本术语

明文,密文,加密算法,密钥,加密,解密

加密基本操作

代换,置换,多重加密

加密基本处理方式

流水加密:一个字符一个字符加密
分组加密:分析各个字符的关系,进行批量加密

对称加密算法

  • 加密解密是同一个密钥,由发送方和接收方共享
  • 如果密钥公开,则通讯不安全
  • 存在的问题:
    1. 在建立安全通讯前,如何保证密钥共享的安全性?
    2. 无法保护发送方,接收方伪造一个消息宣称是发送方发过来的,发送方无法自证

非对称加密算法

  • 使用两个密钥:一个公钥,一个私钥
  • 公钥加密的数据只能用私钥解,私钥加密的数据只能用公钥解
  • 数字签名:发送方可以使用私钥对消息进行签名,使用公钥+签名可以对消息进行校验
  • 可以解决对称机密算法的两个问题,但是计算量比较大,通常来说比对称加密慢 100 倍

加密过程

假定有两个 A B 两人,生成公钥 A,私钥 A,公钥 B,私钥 B,公钥是任何人都可以知道的

  1. A 给 B 发消息:A 使用 **公钥 B** 机密数据后发给 B,B 用 **私钥 B** 解密得到消息
  2. B 给 A 发消息:B 使用 **公钥 A** 机密数据后发给 A,A 用 **私钥 A** 解密得到消息

签名流程

举个例子:现实中会借条,签合同等签上名,来证明合法性,证明这个东西是我承认的。

在互联网如何证明一个数据是由我发出的呢? 数字签名

当 A 要给 B 发消息时:
使用 **私钥 A** 对数据进行签名可得到一个签名字符串,把这个签名字符串和加密字符串一起发给 B,B 可以用 **公钥 A** 来验证 这个签名和数据是否匹配。

在 Java 代码中的运用

JDK 中已经包含了加密算法的实现

1

1

Github: