分组密码及其模式(ECB, CBC, CFB, OFB, CTR)详解与应用指南
lipiwang 2024-11-04 14:33 11 浏览 0 评论
分组密码(block cipher),将明文编码为比特序列后,划分为固定大小多个相等的块进行迭代,迭代方式称为模式,当最后一个块小于分组长度时,需要进行填充。块称为分组,块的长度称为分组长度。例如:DES的块大小为64,8字节,明文abcd1234abcd1234,共16字节,已知块大小8字节,abcd1234即为一个分组(1字节=8比特)。DES、3DES、AES等对称加密算法都属于分组密码。分组密码的模式有多种。明文分组长度与加密后的密文长度是相等的。
分组密码的主要模式有以下5种。
- ECB:Electronic CodeBook(电子密码本)
- CBC:Cipher Block Chaining(密码分组链接)
- CFB:Cipher Feedback(密文反馈)
- OFB:Output Feedback(输出反馈)
- CTR:CounTeR Mode,CTR (计数器)
CBC、CFB、OFB、CRT,在加密第一个明文分组的时候,不存在前一个密文分组,需要一个称为初始化偏移量(Initialization Vector,简称IV),代替前一个密文分组。而ECB将明文分组直接加密生成密文分组,各分组之间无依赖。
ECB
ECB(Electronic Codebook)称为电子密码本。在ECB模式中,明文被分成多个固定大小相等的明文分组,然后明文分组使用相同的密钥进行加密。这意味着,对于相同的明文分组,无论其在消息中的位置如何,加密后的密文分组都是相同的。
明文:abcd1234abcd1234 密钥:process
密文(hex): 64666daa9d8180c364666daa9d8180c33856cb56175e9a72
64666daa9d8180c3 64666daa9d8180c3 3856cb56175e9a72
优点简单、快速。明文中重复部分会反映在生成的密文中,可能成为别有用心之人的破译线索,存在一定风险。不建议使用。
适合加密数据较小或者一次性数据加密,不推荐对安全性要求较高的场合。
CBC
CBC(Cipher Block Chaining)称为密码分组链接,将明文分组与前一个密文分组进行异或运算,再进行加密。当加密时,由于不存在第一个密文分组,需要提前准备一个长度为分组长度的IV。即便存在明文分组相同的情况,也会生成不同的密文分组。
在ECB中,先加密第一个明文分组,还是第二个明文分组,对结果不会产生影响。而CBC,每个密文分组依赖前一个密文分组。IV选择必须保证随机性,否则降低加密安全性。
应用于TLS/SSL协议、对象存储的文件访问加密。
// key
private String sKey = "**pix****HMTtB**";
// IV
private String ivParameter = "**aPP6****57h8**";
//算法名
public static final String KEY_ALGORITHM = "AES";
//加解密算法/模式/填充方式
public static final String CIPHER_ALGORITHM = "AES/CBC/PKCS7Padding";
以上是在项目中实际应用CBD模式的示例,加密算法用于对存储于对象存储中的文件进行加密,防盗链。(key混淆后的)
CFB
CFB(Cipher Feedback)称为密文反馈。在CFB模式中,加密过程不再是直接对明文进行加密然后得到密文,而是利用前一个密文分组经过加密后与当前明文分组进行异或运算来生成新的密文分组。异或运算使得CFB模式能够适应可变长度的数据,并且不需要填充(padding)。使用生成的IV加密后和第一个明文分组异或运算生成密文分组。每个密文分组依赖前一个密文分组。
适合加密的数据流,网络中传输的数据加密。
OFB
OFB(Output Feedback)称为输出反馈,与CFB相似,OFB模式中分组密码的输出并不直接与明文数据结合,而是与明文数据进行异或运算生成密文。
适合数据传输实时加密。
CRT
CTR(CounTeR Mode),称为计数器模式。在CTR模式中,每个分组对应一个逐次累加的计数器,并通过对计数器加密来生成密钥流。最终的密文分组通过将计数器加密得到的比特序列,与明文分组进行异或运算产生。
适合对性能有高要求的场景。
对于需要高效并行处理和高安全性的情景,CTR模式通常是优选。需要较好的扩散性和一定程度的错误隔离,可以选择CBC或CFB。要求简单性和实时处理能力,且对安全性要求不是极端严格,OFB或CFB可以考虑。基本不推荐使用ECB模式,除非是在特定的低安全需求下处理独立的数据块。
读完后,忍不住要加个关注!不是我吹,但你会后悔没关注的!
相关推荐
- 前端入门——css 网格轨道详细介绍
-
上篇前端入门——cssGrid网格基础知识整体大概介绍了cssgrid的基本概念及使用方法,本文将介绍创建网格容器时会发生什么?以及在网格容器上使用行、列属性如何定位元素。在本文中,将介绍:...
- Islands Architecture(孤岛架构)在携程新版首页的实践
-
一、项目背景2022,携程PC版首页终于迎来了首次改版,完成了用户体验与技术栈的全面升级。作为与用户连接的重要入口,旧版PC首页已经陪伴携程走过了22年,承担着重要使命的同时,也遇到了很多问题:维护/...
- HTML中script标签中的那些属性
-
HTML中的<script>标签详解在HTML中,<script>标签用于包含或引用JavaScript代码,是前端开发中不可或缺的一部分。通过合理使用<scrip...
- CSS 中各种居中你真的玩明白了么
-
页面布局中最常见的需求就是元素或者文字居中了,但是根据场景的不同,居中也有简单到复杂各种不同的实现方式,本篇就带大家一起了解下,各种场景下,该如何使用CSS实现居中前言页面布局中最常见的需求就是元...
- CSS样式更改——列表、表格和轮廓
-
上篇文章主要介绍了CSS样式更改篇中的字体设置Font&边框Border设置,这篇文章分享列表、表格和轮廓,一起来看看吧。1.列表List1).列表的类型<ulstyle='list-...
- 一文吃透 CSS Flex 布局
-
原文链接:一文吃透CSSFlex布局教学游戏这里有两个小游戏,可用来练习flex布局。塔防游戏送小青蛙回家Flexbox概述Flexbox布局也叫Flex布局,弹性盒子布局。它决定了...
- css实现多行文本的展开收起
-
背景在我们写需求时可能会遇到类似于这样的多行文本展开与收起的场景:那么,如何通过纯css实现这样的效果呢?实现的难点(1)位于多行文本右下角的展开收起按钮。(2)展开和收起两种状态的切换。(3)文本...
- css 垂直居中的几种实现方式
-
前言设计是带有主观色彩的,同样网页设计中的css一样让人摸不头脑。网上列举的实现方式一大把,或许在这里你都看到过,但既然来到这里我希望这篇能让你看有所收获,毕竟这也是前端面试的基础。实现方式备注:...
- WordPress固定链接设置
-
WordPress设置里的最后一项就是固定链接设置,固定链接设置是决定WordPress文章及静态页面URL的重要步骤,从站点的SEO角度来讲也是。固定链接设置决定网站URL,当页面数少的时候,可以一...
- 面试发愁!吃透 20 道 CSS 核心题,大厂 Offer 轻松拿
-
前端小伙伴们,是不是一想到面试里的CSS布局题就发愁?写代码时布局总是对不齐,面试官追问兼容性就卡壳,想跳槽却总被“多列等高”“响应式布局”这些问题难住——别担心!从今天起,咱们每天拆解一...
- 3种CSS清除浮动的方法
-
今天这篇文章给大家介绍3种CSS清除浮动的方法。有一定的参考价值,有需要的朋友可以参考一下,希望对大家有所帮助。首先,这里就不讲为什么我们要清楚浮动,反正不清除浮动事多多。下面我就讲3种常用清除浮动的...
- 2025 年 CSS 终于要支持强大的自定义函数了?
-
大家好,很高兴又见面了,我是"高级前端进阶",由我带着大家一起关注前端前沿、深入前端底层技术,大家一起进步,也欢迎大家关注、点赞、收藏、转发!1.什么是CSS自定义属性CSS自...
- css3属性(transform)的一个css3动画小应用
-
闲言碎语不多讲,咱们说说css3的transform属性:先上效果:效果说明:当鼠标移到a标签的时候,从右上角滑出二维码。实现方法:HTML代码如下:需要说明的一点是,a链接的跳转需要用javasc...
- CSS基础知识(七)CSS背景
-
一、CSS背景属性1.背景颜色(background-color)属性值:transparent(透明的)或color(颜色)2.背景图片(background-image)属性值:none(没有)...
- CSS 水平居中方式二
-
<divid="parent"><!--定义子级元素--><divid="child">居中布局</div>...
你 发表评论:
欢迎- 一周热门
- 最近发表
- 标签列表
-
- maven镜像 (69)
- undefined reference to (60)
- zip格式 (63)
- oracle over (62)
- date_format函数用法 (67)
- 在线代理服务器 (60)
- shell 字符串比较 (74)
- x509证书 (61)
- localhost (65)
- java.awt.headless (66)
- syn_sent (64)
- settings.xml (59)
- 弹出窗口 (56)
- applicationcontextaware (72)
- my.cnf (73)
- httpsession (62)
- pkcs7 (62)
- session cookie (63)
- java 生成uuid (58)
- could not initialize class (58)
- beanpropertyrowmapper (58)
- word空格下划线不显示 (73)
- jar文件 (60)
- jsp内置对象 (58)
- makefile编写规则 (58)