数据安全和加密那点事

常规的加密算法

传统密码学

  • 字符替换

特点:算法保密

公钥密码学

  • 对称加密算法: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
2
1
2

Github:

Gavin Liu wechat
欢迎您扫一扫上面的二维码,订阅我的微信公众号!