对称加密

对称加密指的就是加密和解密使用同一个秘钥,所以叫做对称加密。对称加密只有一个秘钥,作为私钥。

具体算法有:DES,3DES,TDEA,Blowfish,RC5,IDEA。常见的有:DES,AES,3DES等等。

优点:算法公开、计算量小、加密速度快、加密效率高。 缺点:秘钥的管理和分发非常困难,不够安全。在数据传送前,发送方和接收方必须商定好秘钥,然后双方都必须要保存好秘钥,如果一方的秘钥被泄露,那么加密信息也就不安全了。另外,每对用户每次使用对称加密算法时,都需要使用其他人不知道的唯一秘钥,这会使得收、发双方所拥有的钥匙数量巨大,密钥管理成为双方的负担。

非对称加密

非对称加密指的是:加密和解密使用不同的秘钥,一把作为公开的公钥,另一把作为私钥。公钥加密的信息,只有私钥才能解密。私钥加密的信息,只有公钥才能解密。 私钥只能由一方安全保管,不能外泄,而公钥则可以发给任何请求它的人。非对称加密使用这对密钥中的一个进行加密,而解密则需要另一个密钥。

我们常见的数字证书、加密狗即是采用非对称加密来完成安全验证的。

优点:安全性更高,公钥是公开的,秘钥是自己保存的,不需要将私钥给别人。 缺点:加密和解密花费时间长、速度慢,只适合对少量数据进行加密。

主要算法:RSA、Elgamal、背包算法、Rabin、HD,ECC(椭圆曲线加密算法)。常见的有:RSA,ECC

区别

对称加密算法相比非对称加密算法来说,加解密的效率要高得多。但是缺陷在于对于秘钥的管理上,以及在非安全信道中通讯时,密钥交换的安全性不能保障。所以在实际的网络环境中,会将两者混合使用.

例如针对C/S模型,

  1. 服务端计算出一对秘钥pub/pri。将私钥保密,将公钥公开。

  2. 客户端请求服务端时,拿到服务端的公钥pub。

  3. 客户端通过AES计算出一个对称加密的秘钥X。 然后使用pub将X进行加密。

  4. 客户端将加密后的密文发送给服务端。服务端通过pri解密获得X。

  5. 然后两边的通讯内容就通过对称密钥X以对称加密算法来加解密。

常见的对称加密

# AES

高级加密标准(AES,Advanced Encryption Standard)是最常见的对称加密算法比如:微信小程序加密传输就是用这个加密算法的。对称加密算法也就是加密和解密用相同的密钥,具体的加密流程如下图:

# MD5
MD5出现最多的是在文件签名中,我们下载文件的时候,经常会看到文件页面上附带一个扩展名为.MD5 的文本或者一行字符,这行字符就是就是把整个文件当作原数据通过 MD5计算后的值。

我们下载文件后,可以用检查文件MD5信息的软件对下载到的文件在进行一次计算。两次结果对比就可以确保下载到文件的准确性。

还有常用的是网站比较敏感信息的加密,比如用户密码、支付签名等。

# DES算法
DES加密算法是一种 分组密码,以 64位为 分组对数据加密,它的密钥长度 是 56位,加密解密用同一算法。

DES 加密算法是对密钥进行保密,而公开算法,包括加密和解密算法。这样,只有掌握了和发送方 相同密钥 的人才能解读由 DES加密算法加密的密文数据。因此,破译 DES加密算法实际上就是搜索密钥的编码。对于56位长度的密钥来说,如果用穷举法来进行搜索的话,其运算次数为 2 ^ 56 次。

# 3DES算法
是基于DES的对称算法,对一块数据用三个不同的密钥进行三次加密,强度更高。

“DES”和“AES”算法的比较

DES

1977年1月,美国政府颁布:采纳IBM公司设计的方案作为非机密数据的正式。

目前在国内,随着三金工程尤其是金卡工程的启动,DES算法在POS、ATM、磁卡及智能卡(IC卡)、加油站、高速公路收费站等领域被广泛应用,以此来实现关键数据的保密,

如信用卡持卡人的PIN的加密传输,IC卡与POS间的双向认证、金融交易数据包的MAC校验等,均用到DES算法。

AES

 2000年10月,NIST(美国国家标准和技术协会)宣布通过从15种候选算法中选出的一项新的密匙加密标准。Rijndael被选中成为将来的 AES。Rijndael是在1999年下半年,由研究员Joan Daemen 和 Vincent Rijmen 创建的。

AES正日益成为加密各种形式的电子数据的实际标准。

美国标准与技术研究院(NIST)于2002年5月26日制定了新的高级加密标准(AES)规范。

与公共密钥加密使用密钥对不同,对称密钥密码使用相同的密钥加密和解密数据。通过分组密码返回的加密数据的位数与输入数据相同。迭代加密使用一个循环结构,在该循环中重复置换和替换输入数据。

DES算法优点:DES算法具有极高安全性,到目前为止,除了用穷举搜索法对DES算法进行攻击外,还没有发现更有效的办法。

DES算法缺点:

1、分组比较短。

2、密钥太短。

3、密码生命周期短。

4、运算速度较慢。

AES算法优点:

1、运算速度快。

2、 对内存的需求非常低,适合于受限环境。

3、分组长度和密钥长度设计灵活。

4、 AES标准支持可变分组长度,分组长度可设定为32比特的任意倍数,最小值为128比特,最大值为256比特。

5、 AES的密钥长度比DES大,它也可设定为32比特的任意倍数,最小值为128比特,最大值为256比特,所以用穷举法是不可能破解的。

6、很好的抵抗差分密码分析及线性密码分析的能力。

AES算法缺点:目前尚未存在对AES 算法完整版的成功攻击,但已经提出对其简化算法的攻击。

序号 DES密码 AES密码
1 定义

数据加密标准(也称为DES)是一种对称密钥块密码,由IBM于1977年引入。 在DES加密中,纯文本分为两半,然后DES将输入作为64位纯文本和56位密钥作为输入,以生成64位CipherText,它是数据的加密形式。

另一方面,高级加密标准(也称为AES)也是对称键块密码,由Vincent Rijmen和Joan Daemen于2001年引入。AES采用128位纯文本和128位秘密键,它们共同形成一个128位块,该块在处理后提供16个字节(128位)的密文。
2

键长和轮数

对于DES,用于加密的密钥长度为56位,并且DES涉及16轮相同的操作,与密钥长度无关。

另一方面,如果AES键长度可以是128位,192位和256位,则由于轮数可以是10(128位),12(192位)或14(256位) )。
3 设计

DES的设计和体系结构是基于Feistal网络的。

另一方面,AES的设计基于替换置换网络。
4 安全

由于DES中的操作数是固定的,不允许排列组合,因此更容易破坏加密,因此DES的安全性不如AES。

另一方面,AES比DES密码更安全,并且是事实上的世界标准。
5 涉及的业务

在DES操作中,加密涉及的轮次有扩展、带轮次密钥的异或操作、替换和置换。

另一方面,如果使用AES进行加密,则涉及的操作回合为字节替换,移位行,混合列和键加法。
6 加密

如上所述,DES可以加密64位的纯文本。

另一方面,AES可以加密128位纯文本。

# AES

高级加密标准(AES,Advanced Encryption Standard)是最常见的对称加密算法比如:微信小程序加密传输就是用这个加密算法的。对称加密算法也就是加密和解密用相同的密钥,具体的加密流程如下图:

AES简介
高级加密标准 (AES,Advanced Encryption Standard) 为最常见的对称加密算法,相对 DES 更安全。AES 加密算法采用分组密码体制,每个分组数据的长度为128位16个字节,密钥长度可以是128位16个字节、192位或256位,一共有四种加密模式,一般采用需要初始向量 IV 的 CBC 模式,初始向量的长度也是128位16个字节。

特别提醒:由于jdk对密钥长度支持受限制,使用256位密钥会抛 java.security.InvalidKeyException: Illegal key size or default parameters 异常,可以通过替换 jre 的jar包,具体方式可自行查询

分组密码体制
所谓分组密码体制就是指将明文切成一段一段的来加密,然后再把一段一段的密文拼起来形成最终密文的加密方式。AES 采用分组密码体制,即 AES 加密会首先把明文切成一段一段的,而且每段数据的长度要求必须是128位16个字节,如果最后一段不够16个字节了,就需要用 Padding 来把这段数据填满16个字节,然后分别对每段数据进行加密,最后再把每段加密数据拼起来形成最终的密文。

Padding
填补 (Padding) 就是用来把不满16个字节的分组数据填满16个字节用的,它有三种模式 PKCS5、PKCS7 和 NOPADDING。

PKCS5 是指分组数据缺少几个字节,就在数据的末尾填充几个字节的几,比如缺少5个字节,就在末尾填充5个字节的5;

PKCS7 是指分组数据缺少几个字节,就在数据的末尾填充几个字节的0,比如缺少7个字节,就在末尾填充7个字节的0;

NoPadding 是指不需要填充,也就是说数据的发送方肯定会保证最后一段数据也正好是16个字节。

特别提醒:使用 Nopadding 要加密数据必须是16字节的倍数,否则抛异常

初始向量 IV
初始向量 IV 的作用是使加密更加安全可靠,我们使用 AES 加密时需要主动提供初始向量,而且只需要提供一个初始向量就够了,后面每段数据的加密向量都是前面一段的密文。初始向量 IV 的长度规定为128位16个字节,初始向量的来源为随机生成。至于为什么初始向量能使加密更安全可靠,会在下面的加密模式中提到。

密钥
AES 要求密钥的长度可以是128位16个字节、192位或者256位,位数越高,加密强度自然越大,但是加密的效率自然会低一些,因此要做好衡量。我们开发通常采用128位16个字节的密钥,我们使用 AES 加密时需要主动提供密钥,而且只需要提供一个密钥就够了,每段数据加密使用的都是这一个密钥,密钥来源为随机生成(我们开发时传入的那个为初始密钥,除了初始密钥以外,后面每一轮的密钥都是由上一轮的密钥扩展而来的,密钥扩展有四个步骤:排列、置换、与轮常量异或、生成下一轮密钥的其他列)。

加密模式
AES 一共有四种加密模式,分别是 ECB(电子密码本模式)、CBC(密码分组链接模式)、CFB(密码反馈模式)、OFB(输出反馈模式) 我们一般使用的是 CBC 模式。

ECB 模式是最基本的加密模式,使用明文和密钥来加解密数据,相同的明文块会加密成相同的密文块;

其他模式区别不大,比如 CBC 模式比 ECB 模式多了一个初始向量 IV,加密的时候,第一个明文块会首先和初始向量 IV 做异或操作,然后再经过密钥加密,然后第一个密文块又会作为第二个明文块的加密向量来异或,依次类推下去,这样相同的明文块加密出的密文块就是不同的,明文的结构和密文的结构也将是不同的,因此更加安全。

非对称加解密设计

1.1 专业术语
RSA:RSA加密算法是一种非对称加密算法。
AES:高级加密标准(AES,Advanced Encryption Standard)为最常见的对称加密算法。
SHA1withRSA:用SHA算法进行签名,用RSA算法进行加密,是一种签名算法。
公钥和私钥:公钥(Public Key)与私钥(Private Key)是通过一种算法得到的一个密钥对(即一个公钥和一个私钥),公钥是密钥对中公开的部分,私钥则是非公开的部分。

1.2 方案对比
加密方案    前后端都用RSA非对称加密    采用RSA和AES组合加密
实现方式    前后端都保存自己的私钥和对方的公钥,公钥加密私钥解密    前端保存后端生成的RSA公钥,每次请求都用AES密钥加密,AES密钥用RSA公钥加密。后端用RSA私钥解密AES密钥,然后用AES密钥解密请求数据。响应数据用AES密钥加密,AES密钥用RSA做加签,前端验签,然后解密。
前端暴露    自己的私钥,后端的公钥    后端的公钥
安全性    因为前端暴露了自己的私钥,将使后端的加密不安全    只暴露了后端的RSA公钥,AES密钥是用RSA公钥加密的,而且AES密钥是一次一密,理论上是安全的。
1.3 方案流程
前端:事先保存后端生成的RSA公钥 —>发起请求---->用生成的AES秘钥加密请求数据,同时用RSA公钥加密AES秘钥
后端:接收前端请求数据,使用RSA私钥解密AES秘钥,再用AES秘钥解析请求数据,解密成功后,响应数据用AES密钥加密,AES秘钥用RSA私钥加签后返回;
前端:接收后验签,通过后AES秘钥解密响应数据,完成前后端的交互

2. 模块设计
2.1. 前端加密
保存好后端生成的RSA公钥,每次请求都生成一个AES密钥,做到一次一密,请求json格式{“key”:”XXX”,”data”:”XXX”},key是用RSA公钥加密之后的AES密钥,data是用AES密钥加密之后请求数据。

2.2. 后端解密
接收到前端请求数据之后,先用RSA私钥解密key,获取到AES密钥,再用AES密钥解密data获取到请求数据。

2.3. 后端加签加密
Key是用RSA私钥用SHA1withRSA签名算法把AES密钥加签,data是用AES密钥加密响应数据。

2.4. 前端验签解密
先用RSA公钥用SHA1withRSA签名算法验签key,验签通过再处理之后的流程,不通过停止执行后续流程。验签通过之后,再用AES密钥解密data。

前后端数据加解密的几种方式比较相关推荐

  1. jsp页面数据加载的两种方式

    JSP数据加载的两种方式 第一种: 三层架构写在controller的页面跳转前面,set到request域中 request.setAttribute("name", list) ...

  2. 三分钟撸完前后端crypto-js加解密,你学废了吗?

    文章目录 前言 一.AES概念 二.前端加密 1.安装依赖库 2.实现AES加密算法 3.前端演示效果 三.后端加密 1.加密工具类 2.加密测试 四.Security实现密码加解密 1.前台加密 1 ...

  3. 数据安全之MySQL数据加解密的实现方案

    在我们日常的业务需求中,经常会遇到需要对存储的用户敏感数据进行加密处理的场景,如用户的身份信息.住址.身份证号等等,本文我们就讨论下,业务系统(后端)如何实现数据存储(基于MySQL)的加解密功能. ...

  4. AES实现后端参数加解密

    AES实现后端参数加解密 前言 介绍 Start 引入依赖 编写AES加解密工具类 自定义注解 编写请求数据解密 ControllerAdvice 编写返回数据加密 ControllerAdvice ...

  5. 前后端数据交互方法 汇总

    这篇文章给大家介绍几种常用的前后端数据交互方法,并给出使用建议.以提高前后端协同开发的效率.非常的详细,推荐给小伙伴们,有需要的小伙伴可以参考下. 1.HTML赋值 输出到 Element 的 val ...

  6. T-SQL问题解决集锦——数据加解密

    问题一:如何为数据进行加密与解密,避免使用者窃取机密数据? 对于一些敏感数据,如密码.卡号,一般不能使用正常数值来存储.否则会有安全隐患.以往的加密解密都有前端应用程序来辅助完成.而数据库一般只能加密 ...

  7. 干货 | 万字长文全面解析GraphQL,携程微服务背景下的前后端数据交互方案

    作者简介 古映杰,携程研发高级经理,负责前端框架和基础设施的设计.研发与维护.开源项目react-lite和react-imvc作者. 前言 随着多终端.多平台.多业务形态.多技术选型等各方面的发展, ...

  8. 详解 AJAX-SpringBoot 前后端数据交互

    详解 AJAX-SpringBoot 前后端数据交互 1. Ajax 概述 Ajax 的英文全称是 "Asynchronous JavaScript and XML",即 &quo ...

  9. STM32F1做RSA,AES数据加解密,MD5信息摘要处理

    版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明. 本文链接:https://blog.csdn.net/qq_31878855/article/ ...

最新文章

  1. 【从零学习OpenCV 4】Image Watch插件的使用
  2. Spring Schedule配置及初始化
  3. 牛客多校3 - Two Matchings(dp)
  4. 武汉工程大学计算机学院研究生难吗,武汉工程大学考研难吗?一般要什么水平才可以进入?...
  5. 前端 -- jQuery
  6. 局域网arp欺骗病毒查找预防方法(1)
  7. python的jieba分词
  8. 【算法•日更•第十六期】信息奥赛一本通1597:【 例 1】滑动窗口题解
  9. 定时任务执行框架quartz之时间配置参考以及Demo
  10. Java -jar与-class反编译工具procyon-decompiler的下载与使用
  11. 粒子群算法 模拟退火算法
  12. 在线运行此php解密navicat导出的密码!(用于navicat已经连接数据库但是忘记了密码)
  13. 领域驱动设计落地经验
  14. 2018年俄罗斯世界杯之Java数据爬虫(一)
  15. 360,一场阴谋的制造者
  16. STM32——浅谈睡眠模式、停机模式、待机模式
  17. 数据库实验一:数据库与数据表定义(1)—— 数据库相关操作
  18. 就一个翻译功能,百度你都跟不上谷歌,无力吐槽
  19. 11、CSS3选择器及属性
  20. Python字符串的索引与切片

热门文章

  1. 这次终于理解了PCA主成分分析(附代码)
  2. 多疗程40Hz tACS对阿尔茨海默病患者海马灌注的影响
  3. Docker 简明教程
  4. 基于顺承关系的事理图谱的构建
  5. bpnn——matlab工具箱-归一化函数 premnmx、tramnmx、postmnmx、mapminmax
  6. keep-alive原理
  7. 菜谱系统小成阶段,Python Web 领域终于攻占一个小山头
  8. locust工具学习笔记(四)-SequentialTaskSet 类、event hooks
  9. Win11的两个实用技巧系列之清理驱动器、设置虚拟内存
  10. Oracle根据中文首字母排序