计算机系统应用教程网站

网站首页 > 技术文章 正文

分组密码及其模式(ECB, CBC, CFB, OFB, CTR)详解与应用指南

btikc 2025-01-20 11:07:35 技术文章 26 ℃ 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模式,除非是在特定的低安全需求下处理独立的数据块。



读完后,忍不住要加个关注!不是我吹,但你会后悔没关注的!

Tags:

本文暂时没有评论,来添加一个吧(●'◡'●)

欢迎 发表评论:

最近发表
标签列表