对称加密与非对称加密
对称加密与非对称加密
在数字加密算法中,可划分为对称加密和非对称加密。
对称加密
对称加密算法中对于数据的加密与解密使用同一密钥,即使用相同的密码对内容进行加密解密。
内容 + 密钥 = 密文
密文 - 密钥 = 原文
优点
加解密速度快,效率高,适合一对一的信息加密传输
缺点
数据传输前必须协商好密钥,如果任一方密钥被泄漏,那么加密信息就变得不安全了;不适合一对多的情况,若多人共享同一密钥,则增加了密钥泄漏的风险且不能提供抗抵赖性,若每两人之间使用一个密钥,则会使双方拥有过多密钥,难以管理密钥。
常用算法
-
DES(Data Encryption Standard)
:数据加密标准,是一个分组算法,它以64
位分组对数据进行加解密。 -
3DES
:原理和DES
几乎是一样的,只是使用3
个密钥,对相同的数据执行三次加密,增强加密强度。 -
AES(Advanced Encryption Standard)
:高级数据加密标准,AES
算法可以有效抵制针对DES
的攻击算法 - 此外还有
Blowfish
、IDEA
、RC4
、RC5
、RC6
等算法
非对称加密
非对称加密算法需要两个密钥:公开密钥和私有密钥,私钥不能被其他任何人知道,公钥则可以随意公开。对于数据他们可以相互加解密,公钥对数据进行加密,只有用对应的私钥才能解密;私钥对数据进行加密,只有用对应的公钥才能解密。公钥加密,私钥解密;私钥数字签名,公钥验证。
对于公钥加密的内容,只有私钥能够解开,只要自己的私钥没有泄漏,那么数据传输就是安全的,其他人截获了密文也无法解密其中内容。
对于私钥加密的内容,同样也只有公钥能解开,但是公钥是已经分发出去了,任何人都可以解密私钥内容,其应用场景在于验证数字签名,也就是验证此消息是否由我发送而不是其他人发送,我将要发送的内容进行HASH
,然后将HASH
的摘要信息使用我的私钥进行加密作为数字签名,当接收者使用公钥解开我的数字签名后再使用同样的HASH
算法将内容HASH
验证内容由我发送且数据并未被篡改。
优点
安全性更高,保护通信安全方面有着绝对优势
缺点
加解密速度要远远慢于对称加密,加密算法极其复杂,安全性依赖算法与密钥
常用算法
-
RSA
:是目前最有影响力和最常用的非对称加密算法,它能够抵抗到目前为止已知的绝大多数密码攻击,已被ISO
推荐为公钥数据加密标准。 - 此外还有
ECC
、Diffie-Hellman
、El Gamal
、DSA
等算法
HASH算法
HASH
算法是一种消息摘要算法,不是一种加密算法,但由于其单向运算,具有不可逆性,成为加密算法中的一个构成部分,完整的加密机制不能仅依赖HASH
算法。HASH
也称散列,加密性强的散列一定是不可逆的,这就意味着通过散列结果,无法推出任何部分的原始信息。任何输入信息的变化,哪怕仅一位,都将导致散列结果的明显变化,这称之为雪崩效应。散列还应该是防冲突的,即找不出具有相同散列结果的两条信息。具有这些特性的散列结果就可以用于验证信息是否被修改。
常用算法
MD5
、SHA
、MAC
、CRC
、SM3
参考
http://www.ruanyifeng.com/blog/2011/08/what_is_a_digital_signature.html
- 从用户行为去理解内容-item2vec及其应用
- Dubbo与Zookeeper、SpringMVC整合和使用(入门级)
- Websocket HandShake Sec-WebSocket-Accept 生成策略
- 关于JVM CPU资源占用过高的问题排查
- ActiveMQ简单介绍以及安装
- Java Process destroy方法kill进程,返回码测试
- 百度人脸识别API Java调用
- Java Socket Timeout总结
- 求一个数组中子数组的最大和算法(Java实现)
- JDBC批量提交SQL的几点问题解答
- 工具推荐: 汽车CAN总线分析框架CANToolz
- Windows下jps, jconsole无法查看本地java进程问题解决
- DateFormat 线程不安全
- zip文件操作导致JVM crash
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- File 类基础解析3 文件过滤器优化
- 原创 | 我在git merge的时候遇到了冲突,怎么解决?
- protobuffer的前世今生(一)——简介
- protobuffer的前世今生(二)——编码
- Java中多线程的使用(超级超级详细)+多线程的实现原理 2
- protobuffer的前世今生(三)——序列化和反序列化性能比较
- 女生勿扰,只适合男孩子的 Python 爬虫,里面东西不给钱统统白送
- LTP 4来了!
- protobuffer的前世今生(五)——在Java中的两种使用方式之注解模式
- Java File类基础解析 1
- jit即使编译语言调用c++
- java JDBC系列1 JDBC类的简析与JDBC的基础操作
- TRTC Android端开发接入学习之常见问题(十一)
- 树莓派基础实验7:倾斜开关实验
- Hive SQL经典优化案例