密码技术扫盲:对称加密

news2024/10/3 0:20:57

个人博客

  • 🎯 密码技术扫盲:对称加密
  • 密码技术扫盲:非对称加密
  • 密码技术扫盲:认证

人类最较真、技艺最精湛的事业是军事,密码技术最大放异彩的地方也在军事,战争中需要通过无线电或其他手段来传达指令,如果指令被对方破解,那就相当于一举一动都暴露在对方面前,结果自然不言而喻。回到 IT 领域,在 Web 应用开发中,当涉及到安全时,会频繁地遇到密码技术相关的概念,有必要对其进行一个梳理,建立系统地认识。

密码技术的目标主要包括:

  • ① 提供身份认证;
  • ② 提供机密性保障;
  • ③ 提供完整性保障;
  • ④ 提供不可否认性保障;

为了实现上述目标,最基本的工具有 6 种:

  • 对称加密,提供 ②;
  • 非对称加密,提供 ②;
  • 单向散列,提供 ③;
  • 消息认证码,提供 ①③;
  • 数字签名,提供 ①③④;
  • 伪随机数生成器,不可或缺的要素。

本篇先来看看对称加密。

众所周知,计算机虽然神通广大,但实际只认识 0/1,称为二进制。每一个被存放的 0/1 称为一个比特位,任何字符在计算机里都是通过一连串的比特位来表示并存放,这就是字符编码。最早的编码标准为标准 ASCII 编码,使用 8 个比特位的 0/1 组合来表示字符(首位为 0)。也就是说,从计算机的角度来看,所有由字符组成的信息都是一串比特位,因此用计算机实现的加密就是将明文的比特序列替换为密文的比特序列,解密则相反。

显然加解密就是对比特位进行运算,称为比特运算。比特运算和逻辑运算一样,都是在二值之间进行变换,在加密中常用的比特运算是异或(XOR)运算 —— 相同得 0,相异得 1。当比特位从 0 变为 1 或者从 1 变为 0,称为发生了比特翻转。

在目前的加密算法中有一个要素叫密钥,在对称加密中,加密和解密使用同一把密钥。密钥是一个比特位数很多(使得包含所有比特组合的密钥空间足够大,增加破解的难度)的随机数字,通常用 16 进制形式表示,使用密钥的比特序列与加密算法某一阶段生成的比特序列做异或,再经若干轮处理得到密文。

也就是说,最直观的加密方式就是一个密钥直接与明文做异或,如果密钥长度和明文长度一致,就称为一次性密码本,一次性密码本是最强的加密方式——由香农通过数学证明其是无法被破译的。但一次性密码本并不实用,因为密钥需要与明文长度一致,如果明文有100M,密钥也需要有100M,只有特别敏感的场景才可以不计成本地采用这种理论上绝对安全的加密方式。

目前常用的对称加密算法有:

  • DES(Data Encryption Standard),是 1977 年美国联邦信息处理标准(FIPS)中采用的一种密码,密钥长度为 64 比特(其中每隔 7 比特会设置一个错误检查比特),已经可以在短时间内破解,所以不推荐使用;
  • 3DES,DES 的加强版,需要三个 DES 密钥,执行过程为 ① DES 加密→ ② DES 解密→ ③ DES 加密,三个密钥分别用于三个步骤中,如果三个密钥相同则等价于普通 DES 加密,如果 ①③ 相同就称为 DES-EDE2,如果三个密钥都不同就称为 DES-EDE3;
  • AES(Advanced Encryption Standard),由美国标准化组织 NIST 组织的算法选拔活动的产物,该活动面向全世界的密码学家,参与选拔的算法一旦被密码学家找到弱点就直接淘汰,最终胜出的算法为 Rijndael,算法用到的密钥长度可以有 128/192/256 三种选择,AES 的安全性很高,所以目前推荐使用;
  • SM1/SM4/SM7/ZUC,商密标准的对称加密算法,密钥长度为 128 比特。

上面介绍的 DES/3DES/AES/SM1/SM4/SM7 都是分组加密算法,所谓分组加密是指对超过密钥长度的数据进行加密时,一次只能加密一个固定长度的数据,这样就需要将数据切分为若干组,使用同一个密钥,一组一组地迭代进行加密,迭代的方式称为模式,主要有 ECB/CBC/CFB/OFB/CTR 5 种。除了分组加密算法,另一种使用场景比较少的算法类型叫流式加密算法,流式加密算法使用一个密钥流来进行加密,RC4、ZUC 就是流式加密算法。

主流的分组加密算法模式有:

ECB(Electronic CodeBook)

ECB 模式直接将明文按分组长度切分为一个个独立的分组,对每个分组执行一样的加密操作。这种模式容易被攻击,如简单交换密文分组 1 和 2 的顺序就有可能构造出合法的带破坏性的信息,所以不推荐。
在这里插入图片描述

图中的【加密】省略了密钥和具体的加密步骤

CBC(Cipher Block Chaining)

CBC 模式的每个密文分组不再是独立的,因此通过交换密文分组位置的攻击方式不再有效。因为每一次分组在处理时需要用到前一个密文分组,所以在处理第一个明文分组之前加了一个初始向量 IV。CBC 的缺点是如果中间某个比特丢失,将导致后续的密文分组无法解密。推荐使用。
在这里插入图片描述

CFB(Cipher FeedBack)

将明文分组与密码算法的输出做异或来得到密文,从全局来看,就是明文和一串密钥流做异或,结构类似于一次性密码本加密,只是密钥流不是真随机数。CFB 模式下可以逐比特加密,因此可以说是用分组密码方式实现了流密码。
在这里插入图片描述

OFB(Output-Feedback)

和 CFB 类似,也是使用密码算法生成的密钥流来和明文分组异或,区别是密钥流的生成和密文分组没有关联,这使得生成密钥流和加密两个操作可以并行,密钥流实际上也可以提前生成好。
在这里插入图片描述

CTR(Counter)

采用一个逐次累加的计数器来生成密钥流,生成密钥流和加密两个操作也可以并行。
在这里插入图片描述


参考:

  • 《图解密码技术》
  • how-to-choose-an-aes-encryption-mode-cbc-ecb-ctr-ocb-cfb

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/95234.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

LeetCode刷题复盘笔记—一文搞懂动态规划之309. 最佳买卖股票时机含冷冻期问题(动态规划系列第二十四篇)

今日主要总结一下动态规划的一道题目,309. 最佳买卖股票时机含冷冻期 题目:309. 最佳买卖股票时机含冷冻期 Leetcode题目地址 题目描述: 给定一个整数数组prices,其中第 prices[i] 表示第 i 天的股票价格 。​ 设计一个算法计算…

Python编程 函数的定义与参数

作者简介:一名在校计算机学生、每天分享Python的学习经验、和学习笔记。 座右铭:低头赶路,敬事如仪 个人主页:网络豆的主页​​​​​​ 目录 前言 一.函数 1.函数例子 不会让代码重复的出现。CVout 2.函数介绍(熟悉) 3.…

如何在AdsPower中设置Oxylabs住宅代理和数据中心代理?

AdsPower是一款适用于Windows和Mac系统的浏览器管理工具,允许多用户登录。AdsPower的主要功能有多账户管理、浏览器指纹处理等。 集成操作流程 在官网(www.adspower.com/download)下载AdsPower并完成安装工作后,单击新建配置文件…

分布式文件系统之NFS

「分布式」是现在蛮流行的一个词,而其盛行,离不开底层网络通信能力的迅速发展。在文件系统这个领域,早期的分布式实现更多的是用来实现「共享」,而不是「容错」。传统的集中式文件系统允许单个系统中的多用户共享本地存储的文件&a…

SVG公众号排版 | GIF动图如何禁止循环播放?PS设置了也没用!

在SVG公众号排版中,我们经常使用到GIF动图,有些排版需求是想让GIF动图一直无限循环播放,也有其他排版需求是只想让GIF动图播放一次就停止了,这种情况我们可以通过Photoshop软件来设置GIF动图的播放次数,详见下图。 但是呢,也有一种情况,即使在Photoshop软件设置了GIF动图…

大话设计模型 Task02:策略、装饰、代理

目录一、简单工厂模式问题描述模式定义问题分析代码实现二、策略模式问题描述问题分析模式定义代码实现三、装饰模式问题描述问题分析模式定义代码实现四、代理模式问题描述问题分析模式定义代码实现五、工厂方法模式问题描述问题分析模式定义简单工厂 vs. 工厂方法代码实现一、…

上传项目代码到Github|Gitee

上传项目代码到Github|Gitee 文章目录上传项目代码到Github|Gitee1、前置准备1.1 Git 安装1.2 在 Git 中设置用户名1.2.1 为计算机上的每个存储库设置 Git 用户名1.2.2 为一个仓库设置 Git 用户名1.3 SSH免密登录1.4 Github创建一个新的仓库2、上传项目2.1 初始化本地库2.2 添加…

蓝桥杯入门即劝退(十六)查找元素范围(双解法)

欢迎关注点赞评论,共同学习,共同进步! ------持续更新蓝桥杯入门系列算法实例-------- 如果你也喜欢Java和算法,欢迎订阅专栏共同学习交流! 你的点赞、关注、评论、是我创作的动力! -------希望我的文章…

什么是制造业数字化转型?制造业数字化转型的核心与意义

对于生产制造企业来讲,当下如果不进行数字化转型的话,很大概率会被时代所抛弃的。为什么这么讲?因为在未来的很长一段时间,你可以充分了解到,数字化转型已然成为了制造业向前的主旋律。既然数字化势在必行,…

可以赚钱的副业项目,简单易上手兼职副业推荐

在当前的经济环境下,对每个人来说,仅仅依靠那点薪水生活是非常紧张的。为了改善你的生活,你需要找到其他赚钱的方法,在互联网上做兼职是一个不错的选择。 今天推荐几个普通人可以做的兼职副业,希望对大家有所帮助。 一…

微信公众号的文章可以修改几次?修改的步骤有哪些

许多小伙伴们在运营微信公众号的时候,可能会遇到过这些难题,在发布微信公众号之前检查没有检查好,导致有错字或者是错句。有的时候可能配图还会配错! 今天伯乐网络传媒就给大家带来一些实用的东西,比如微信公众号可以…

深入理解 Python 的对象拷贝和内存布局

深入理解 Python 的对象拷贝和内存布局 前言 在本篇文章当中主要给大家介绍 python 当中的拷贝问题,话不多说我们直接看代码,你知道下面一些程序片段的输出结果吗? a [1, 2, 3, 4] b a print(f"{a } \t|\t {b }") a[0] 100…

微信小程序的自定义组件(1)

文章目录1. 自定义组件2. 组件样式3. 组件-数据、方法和属性4. 组件数据监听器5. 组件纯数据字段1. 自定义组件 Component(Object object) | 微信开放文档 (qq.com) 创建组件 在项目的根目录中,鼠标右键,创建components->test文件夹在新建的componen…

第十二章 计算学习理论

12.1 基础知识 计算学习理论研究的关于通过计算来进行学习的理论。即关于机器学习的理论基础,其目的是分析学习任务的困难本质,为学习算法提供理论保证,并根据分析结果指导算法设计。 12.2 PAC学习 计算学习理论中最基本的是概率近似正确&…

点击化学染料DBCO-PEG-CY7.5|Cyanine7.5-PEG-DBCO|花青素Cyanine7.5

​DBCO-PEG-CY7.5点击化学染料其中Cy7.5 (Cyanine 7.5) 是一种发近红外(NIR)荧光的花青素荧光染料。根据磺化与否,分为普通Cy7.5和磺化Cy7.5,但常常统称为Cy7.5。 Cy7.5的消光系数高,荧光也很亮,并且对pH不…

为什么很多人转行学习Web前端技术?

为什么很多人转行学习Web前端技术?不管你是工人阶层还是服务行业,是否想过转行IT,转行IT后肯定会选择一门编程语言进行深入学习,很多转行的人基础都不是太好,不是科班出身,甚至有的是专科乃至中专,前端的H…

cuda学习笔记3——cuda常用内存相关函数及其使用示例

cuda学习笔记3——cuda常用内存相关函数及其使用示例常用的GPU内存函数cudaMalloc()cudaMemcpy()cudaFree()代码示例常用的GPU内存函数 cuda程序将系统区分成host和device,二者有各自的memory。kernel可以操作device memory,为了能很好的控制device端内…

软件测试人员去外包公司待遇怎么样?外包薪资高吗?

📌 博客主页: 程序员二黑 📌 专注于软件测试领域相关技术实践和思考,持续分享自动化软件测试开发干货知识! 📌 公号同名,欢迎加入我的测试交流群,我们一起交流学习! 可能…

Python基础-画图:matplotlib

Python画图主要用到matplotlib这个库。具体来说是pylab和pyplot这两个子库。这两个库可以满足基本的画图需求。 pylab神器:pylab.rcParams.update(params)。这个函数几乎可以调节图的一切属性,包括但不限于:坐标范围,axes标签字号…

ESP32 OTA

装好Arduino环境后,做了一个遥控小车: 1、uni-app 包装 nipplejs (Nipplejs by yoannmoinet)做了一个简单的摇杆,调用ESP32的WebServer接口,控制小车 2、ESP32 连上路由的WiFI,用WebServer开发了一个接口&#xff0c…