数据安全和加密那点事
常规的加密算法
传统密码学
- 字符替换
特点:算法保密
公钥密码学
对称加密算法:DES,AES
非对称加密算法:RSA
特点:算法公开,参数保密
密码学的基本术语
明文,密文,加密算法,密钥,加密,解密
加密基本操作
代换,置换,多重加密
加密基本处理方式
流水加密:一个字符一个字符加密
分组加密:分析各个字符的关系,进行批量加密
对称加密算法
- 加密解密是同一个密钥,由发送方和接收方共享
- 如果密钥公开,则通讯不安全
- 存在的问题:
- 在建立安全通讯前,如何保证密钥共享的安全性?
- 无法保护发送方,接收方伪造一个消息宣称是发送方发过来的,发送方无法自证
非对称加密算法
- 使用两个密钥:一个公钥,一个私钥
- 公钥加密的数据只能用私钥解,私钥加密的数据只能用公钥解
- 数字签名:发送方可以使用私钥对消息进行签名,使用公钥+签名可以对消息进行校验
- 可以解决对称机密算法的两个问题,但是计算量比较大,通常来说比对称加密慢 100 倍
加密过程
假定有两个 A B 两人,生成公钥 A,私钥 A,公钥 B,私钥 B,公钥是任何人都可以知道的
- A 给 B 发消息:A 使用 **公钥 B** 机密数据后发给 B,B 用 **私钥 B** 解密得到消息
- B 给 A 发消息:B 使用 **公钥 A** 机密数据后发给 A,A 用 **私钥 A** 解密得到消息
签名流程
举个例子:现实中会借条,签合同等签上名,来证明合法性,证明这个东西是我承认的。
在互联网如何证明一个数据是由我发出的呢? 数字签名
当 A 要给 B 发消息时:
使用 **私钥 A** 对数据进行签名可得到一个签名字符串,把这个签名字符串和加密字符串一起发给 B,B 可以用 **公钥 A** 来验证 这个签名和数据是否匹配。
在 Java 代码中的运用
JDK 中已经包含了加密算法的实现
1 |
1 |
Github:
本文是原创文章,采用 CC BY-NC-ND 4.0 协议,完整转载请注明来自 Gavin Liu - 代码人生与科技生活
评论