ecb_二次标记 - CSDN
精华内容
参与话题
  • ECB模式解读

    千次阅读 2018-08-31 21:46:23
    一 什么是ECB模式 ECB模式全称是Electronic CodeBook模式,在ECB模式中,将明文分组加密之后的结果将直接成为密文分组。 使用ECB模式加密时,相同的明文分组会被转换为相同的密文分组,我们可以将其理解为是一...

    一 什么是ECB模式

    ECB模式全称是Electronic CodeBook模式,在ECB模式中,将明文分组加密之后的结果将直接成为密文分组。

    使用ECB模式加密时,相同的明文分组会被转换为相同的密文分组,我们可以将其理解为是一个巨大的“明文分组->密文分组”的对应表,因此ECB模式也称为电子密码本模式。

    当最后一个明文分组的内容小于分组长度时,需要用一些特定的数据进行填充。

    二 ECB模式的特点

    ECB模式中,明文分组与密文分组是一一对应的关系,因此,如果明文中存在多个相同的明文分组,则这些明文分组最终都将被转换为相同的密文分组。这样一来,只要观察一下密文,就可以知道明文存在怎样的重复组合,并可以以此为线索来破译密码,因此ECB模式是存在一定风险的。

    三 对ECB模式的攻击

    攻击者无需破译密码就能操纵明文。

    下面举一个例子说明:

    假设分组长度为128bit(16个字节),某银行的转账请求数据由以下3个分组构成。

    分组1=付款人的银行账号

    分组2=收款人的银行账号

    分组3=转账金额。

    场景是:从A-5374账号向B-6671账号转账1亿元

    16进制数据表示如下:

    将上面数据用ECB加密,加密后,看不出明文分组内容。

    攻击者将密文分组1和2对调。

    攻击者没有试图破译密码,但场景却发生了变化:

    现在场景变成了:B-6671账号向A-5374账号转账1亿元。

    完全相反,这就是ECB的弱点,不破译密文的情况下操纵明文。

    展开全文
  • CFB模式解读

    万次阅读 2018-09-03 22:05:15
    ECB模式和CBC模式中,明文分组都是通过密码算法进行加密的,然而,在CFB模式中,明文分组并没有通过密码算法来直接进行加密。 明文分组和密文分组之间并没有经过“加密”这一步骤。在CFB模式中,明文分...

    一 什么是CFB模式

    CFB模式全称Cipher FeedBack模式(密文反馈模式)。在CFB模式中,前一个密文分组会被送回到密码算法的输入端。所谓反馈,这里指的就是返回输入端的意思。

    在ECB模式和CBC模式中,明文分组都是通过密码算法进行加密的,然而,在CFB模式中,明文分组并没有通过密码算法来直接进行加密。

    明文分组和密文分组之间并没有经过“加密”这一步骤。在CFB模式中,明文分组和密文分组之间只有一个XOR。

    CBC模式和CFB模式比较

    二 初始化向量

    在生成第一个密文分组时,由于不存在前一个输出的数据,因此需要使用初始化向量(IV)来代替。一般来说,我们需要在每次加密时生成一个不同的随机比特序列用作初始化向量。

    三 CFB模式与流密码

    CFB模式的结构和一次性密码本非常相似。一次性密码本是通过“明文”与“随机比特序列”进行XOR运算来生成“密文”的。而CFB模式则是通过将“明文分组”与“密码算法的输出”进行XOR运算来生成“密文分组”的。在通过 XOR来进行加密这一点上,两者是非常相似的。

    在CFB模式中,密码算法的输出相对于一次性密码本中的随机比特序列。由于密码算法的输出是通过计算得到的,并不是真正的随机数,因此CFB模式不可能像一次性密码本那样具备理论上不可破译的性质。

    CFB模式中由密码算法所生成的比特序列称为密钥流。在CFB模式中,密码算法相对于用来生成密钥流的伪随机数生成器,而初始化向量相当于伪随机数生成器的“种子”。

    在CFB模式中,明文数据可以被逐比特加密,因此可以将CFB模式看作是一种使用分组密码来实现流密码的方式。

    四 CFB模式的解密

    CFB模式解密时,需要注意的是分组密码算法依然执行加密操作,密钥流是通过加密操作来生成的。

    五 对CFB的攻击

    对CFB模式可以实施重放攻击。 

    Alice向Bob发送一条消息,这条消息由4个密文分组组成。主动攻击者将该消息中的后3个密文分组保存了下来。第二天,Alice又向Bob发送了内容不同的4个密文分组(假设Alice使用了相同的密钥)。攻击者用昨天保存下来的3个密文分别将今天发送的后3个密文分组进行了替换。

    于是,Bob解密时,4个分组中只有第1个可以解密成正确的明文分组,第2个会出错,而第3个和第4个则变成了被攻击者替换的内容(也就是昨天发送的明文内容)。攻击者没有破解密码,就成功地将以前的电文混入了新电文中。而第2个分组出错到底是通信错误呢,还是被人攻击所造成的呢?Bob是无法做出判断的。

    展开全文
  • ECB模式详解

    千次阅读 2017-07-13 15:17:29
    对成密码加密

    ECB模式(电子密码本模式)

    在ECB模式中,将明文分组加密之后的结果直接作为密文分组,缺点是会容易攻击,因为明文相同的密文相同

    概念
    ECB(Electronic Codebook,电码本)模式是分组密码的一种最基本的工作模式。在该模式下,待处理信息被分为大小合适的分组,然后分别对每一分组独立进行加密或解密处理。如下图所示:
    我们可以将其理解为是一个巨大的"明文分组→密文分组"的对应表
    ECB模式下的加解密过程
    ECB模式下的加解密过程

    ECB模式的优缺点

    编辑
    ECB模式作为一种基本工作模式,具有操作简单,易于实现的特点。同时由于其分组的独立性,利于实现并行处理,并且能很好地防止误差传播。
    另一方面由于所有分组的加密方式一致,明文中的重复内容会在密文中有所体现,因此难以抵抗统计分析攻击。
    因此,ECB模式一般只适用于小数据量的字符信息的安全性保护,例如密钥保护。


    ECB模式优点:

    1. 简单

    2. 有利于并行计算

    3. 误差不会被传送

     

    ECB模式缺点:

    1. 不能隐藏明文的模式

    2. 可能对明文进行主动攻击

     

    对ECB模式的攻击,截图来源自图解密码技术一书:

     

    ECB模式的加密:

    复制代码
    #include <STRING.H>
    
    #define IN
    #define OUT
    
    //假设加密分组为4字节一组
    
    /**************************************************************************
    *功  能:    加密算法 (与Key异或)
    *参  数:    lpszData        当前明文分组数据
    *           lpszKey         Key    
    *           lpszDeData      加密后的结果
    *
    *返回值:    
    **************************************************************************/
    void Encrypt(IN const char *lpszData, IN const char *lpszKey, OUT char *lpszEnData)
    {
        int i = 0;
        for (i = 0; i < 4; i++)
        {
            lpszEnData[i] = lpszData[i] ^ lpszKey[i];
        }
    }
    
    /**************************************************************************
    *功  能:    解密算法 (再次异或还原明文)
    *参  数:    lpszData        当前密文分组数据
    *           lpszKey         Key    
    *           lpszDeData      解密后的结果
    *
    *返回值:    
    **************************************************************************/
    void Decrypt(IN const char *lpszData, IN const char *lpszKey, OUT char *lpszDeData)
    {
        int i = 0;
        for (i = 0; i < 4; i++)
        {
            lpszDeData[i] = lpszData[i] ^ lpszKey[i];
        }
    }
    
    int main(int argc, char* argv[])
    {
        char *lpszData = "Hello World!";
        char szEnData[16] = {0};
        char szDeData[16] = {0};
        char *lpszKey = "1234";
        int i = 0;
        
        printf("原始数据: %s\r\n", lpszData);
        
        while (true)
        {
            if (strlen(lpszData + i) == 0)
            {
                break;
            }
            
            Encrypt(lpszData + i, lpszKey, szEnData + i);
            i += 4;
        }
        
        printf("加密后数据: %s\r\n", szEnData);
        
        i = 0;
        while (true)
        {
            if (strlen(szEnData + i) == 0)
            {
                break;
            }
            
            Decrypt(szEnData + i, lpszKey, szDeData + i);
            i += 4;
        }
        
        printf("解密后数据: %s\r\n", szDeData);
        
        return 0;
    }
    复制代码

    原数据: Hello World!

    加密后: yW_X^d[C^W

    解密后: Hello World!


    展开全文
  • 版权声明:本文为作者原创,如需转载,请注明出处 ... 注:以下图片来自于《图解密码学》,这本书讲的更全面细致,建议阅读,在我资源库中有此书,还有使用go语言具体...1. ECB - Electronic Code Book, 电子密码本...

    版权声明:本文为作者原创,如需转载,请注明出处
    https://blog.csdn.net/weixin_42940826
    注:以下图片来自于《图解密码学》,这本书讲的更全面细致,建议阅读,在我资源库中有此书,还有使用go语言具体实现和解释此书中的各种加密算法的文档,有需要的可以自习前往免费下载

    Q:为什么需要分组模式?
    A:明文的长度不固定,而分组密码只能处理特定长度的一块数据,这就需要对分组密码的算法进行迭代,以便将一段很长的明文全部加密,而迭代的方法就是分组的模式。

    一图全览五种分组模式

    常用分组模式全览

    五种模式详解

    1. ECB - Electronic Code Book, 电子密码本模式

    • 特点: 简单, 效率高, 密文有规律, 容易被破解
    • 最后一个明文分组必须要填充
      • des/3des -> 最后一个分组填充满8字节
      • aes -> 最后一个分组填充满16字节
    • 不需要初始化向量

    ECB模式图解


    2. CBC - Cipher Block Chaining, 密码块链模式(推荐使用)

    • 特点: 密文没有规律, 经常使用的加密方式
    • 最后一个明文分组需要填充
      • des/3des -> 最后一个分组填充满8字节
      • aes -> 最后一个分组填充满16字节
    • 需要一个初始化向量 - 一个数组
      • 数组的长度: 与明文分组相等
      • 数据来源: 负责加密的人的提供的
      • 加解密使用的初始化向量值必须相同
        CBC模式的加密

    3. CFB - Cipher FeedBack, 密文反馈模式

    • 特点: 密文没有规律, 明文分组是和一个数据流进行的按位异或操作, 最终生成了密文
    • 需要一个初始化向量 - 一个数组
      • 数组的长度: 与明文分组相等
      • 数据来源: 负责加密的人的提供的
      • 加解密使用的初始化向量值必须相同
    • 不需要填充
      CFB模式加密

    4. OFB - Output-Feedback, 输出反馈模式

    • 特点: 密文没有规律, 明文分组是和一个数据流进行的按位异或操作, 最终生成了密文
    • 需要一个初始化向量 - 一个数组
      • 数组的长度: 与明文分组相等
      • 数据来源: 负责加密的人的提供的
      • 加解密使用的初始化向量值必须相同
    • 不需要填充
      OFB分组模式

    5. CTR - CounTeR, 计数器模式(重点,推荐使用)

    • 特点: 密文没有规律, 明文分组是和一个数据流进行的按位异或操作, 最终生成了密文
    • 不需要初始化向量
      • go接口中的iv可以理解为随机数种子, iv的长度 == 明文分组的长度
    • 不需要填充
      这里我们有必要给出CTR模式额解密流程,因为CTR模式的解密和加密是一模一样的过程,在程序实现中也是可逆的,具体程序在文章实现底部有链接
      CTR分组模式
      CTR解密流程
      通过对比发现CTR加密即解密,解密即加密,且各分组之间是独立的,可以并发完成,效率高。

    总结

    以上五种分组模式中,ECB模式很容易被破解,如今已经很少再使用,其余四种分组模式各有千秋。
    但极力推荐CBC模式和CTR模式,尤其是CTR模式,不需要填充,代码实现起来很方便。而且加密和解密的方法是一样的,并且可以实现并发分组,效率高,安全性也有保障

    Q:何时需要填充,何时不需要填充?
    A:观察分组模式的图示可以看出,加密后再进行亦或操作的不需要填充,而先进性亦或操作再加密的则不需要填充,这是因为亦或操作需要两个相同长度的数据,一一对比计算!


    代码实现

    篇幅有限,我在这篇帖子用以上分组模式实现了AES、DES、3DES的加密解密(go语言),轻戳了解。
    CBC模式实现DES和3DES加密解密
    CTR模式实现AES加密解密

    展开全文
  • 块加密 块加密,英文Block Cyper,又称分组加密,是一种...ECB模式 又称电子密码本模式:Electronic codebook,是最简单的块密码加密模式,加密前根据加密块大小(如AES为128位)分成若干块,之后将每块使用相同的
  • AES加密解密(ECB模式)

    万次阅读 2017-09-20 17:16:15
    高级加密标准(英语:Advanced Encryption ...这个标准用来替代原先的DES,已经被多方分析且广为全世界所使用。经过五年的甄选流程,高级加密标准由美国国家标准与技术研究院(NIST)于2001年11月26日发布于FIPS ...
  • 1.电码本模式(Electronic Codebook Book (ECB)); 2.密码分组链接模式(Cipher Block Chaining (CBC)); 3.计算器模式(Counter (CTR)); 4.密码反馈模式(Cipher FeedBack (CFB)); 5.输出反馈模式(Output ...
  • ECB+数据集介绍

    2020-05-12 11:20:56
    一、Event Definition ACE:an “event“ is defined as a specific occurrence of something that happens, often a change of state, involving participants (LDC, ...ECB+数据集对上述定义做了拓展,将来源于新闻
  • 在分组加密算法中,有几种不同的工作模式,分别是ECB(Electronic CodeBook,电子密码本模式)、CBC(Cipher-block chaining,密码块连接模式)、PCBC(Propagating cipher-block chaining,填充密码块链接模式)、...
  • Java实现国密算法SM2,SM3,SM4,并且实现ECB和CBC模式

    万次阅读 热门讨论 2018-05-19 17:34:00
    代码中实现了电码本ECB模式和密文分组连接CBC模式,SM3.java和SM4.java为算法实现类,utils的都是根据实现类写的工具,可以根据需要调用杂凑算法SM3的杂凑功能获得杂凑值。 SM4.java中 sm4_crypt_ecb(SM4_...
  • AES/ECB/PKCS5PADDING

    2016-05-27 11:36:48
    最近需要和银行pos做数据通讯,银行端算法为java实现的 AES/ECB/PKCS5PADDING我也改不了, c/c++这边实现ECB算法本来就少,PKCS5PADDING的更是没有,索性自己动手。工作原因c和java都得熟悉,因此把java端和c/c++...
  • POS终端ECB算法详细解释之二

    千次阅读 2015-01-07 14:19:53
    a) 将欲发送给POS中心的消息中,从消息类型(MTI)到63域之间的部分构成MACELEMEMENT BLOCK (MAB)。 即00-63域之间的数据块(将其拼接成字符串获取字节数组得到macBytes); b) 对MAB,按每8个字节做异或(不管...
  • 银联Ecb加密算法

    2018-07-27 16:28:57
    java实现的银联Ecb加密算法,可运行,含算法步骤详述。
  • C语言实现AES_ECB加密

    2019-03-11 22:47:34
    基于C语言实现的AES_ECB模式加密,代码为.c和.h文件,方便移植,代码实现过程清晰明了,注释丰富。上传文件为VS2010工程文件,若没有安装VS2010,可将.c和.h文件复制到其他工程,添加后即可使用。
  • aes的ecb模式Before I start, I must say that Zoom is my standard VC package and I love its performance and easy of setup. 在开始之前,我必须说Zoom是我的标准VC软件包,我喜欢它的性能和易于安装的特性。 ...
  • DES加密的ECB模式

    2014-01-09 09:28:17
    DES加密的ECB模式加密、解密和转码。
  • js AES(ECB)加密

    千次阅读 2019-03-09 13:01:17
    js中进行AES(ECB)加密,为什么用到AES加密呢,这个是因为分组加密,加密出来的是16的倍数,在RSA解密处理一个问题。不是16的倍数的不能解密。 ECB模式是不用偏移量的,偏移量我也没搞懂是什么意思,所以不用了吧,...
  • Golang AES ECB加密

    2014-06-05 23:48:36
    <p>Trying to emulate an algorithm in Go that is basically AES ECB Mode encryption. <p>Here's what I have so far <pre><code>func Decrypt(data []byte) []byte { cipher, err := aes.NewCipher([]byte(KEY...
  • aes128 ecb pkcs

    2018-07-13 09:31:07
    aes128 ECB PKCS填充,加密解密同一个API,很简洁。已经在项目中使用。
  • AES ECB模式的JAVA实现

    2017-07-16 22:20:48
    实现AES的ECB模式的加解密并将文件存放于txt文本中,放txt的路径可能需要进行更改,可以用exe4j将java程序改成可以执行的exe文件
1 2 3 4 5 ... 20
收藏数 26,360
精华内容 10,544
关键字:

ecb