分组密码模式: ECB模式(电子密码本模式)

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了分组密码模式: ECB模式(电子密码本模式)相关的知识,希望对你有一定的参考价值。

在ECB模式中,将明文分组加密之后的结果直接作为密文分组,如下图所示:

技术分享

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

 

ECB模式优点:

1. 简单

2. 有利于并行计算

3. 误差不会被传送

 

ECB模式缺点:

1. 不能隐藏明文的模式

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

 

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

技术分享

技术分享

 

ECB模式的加密:

‘‘‘
假设加密分组为4字节一组
‘‘‘
def Encrypt(strData, key) :
    strEnData = ""
    for i in range(0, len(strData)):
        #按位异或后保存
        rst = ord(list(strData)[i]) ^ ord(list(key)[i])
        strEnData = strEnData + chr(rst)        
    return strEnData

def Decrypt(strData, key) :
    strDeData = ""
    for i in range(0, len(strData)):
        #再次异或还原
        rst = ord(list(strData)[i]) ^ ord(list(key)[i])
        strDeData = strDeData + chr(rst)        
    return strDeData

if __name__ == __main__ : 
    strData = "Hello World!"
    key = "1234"
    i = 0
    j = 4
    strEnData = ""
    
    print("原数据: %s\\r\\n" % strData)
    
    while True :
        strGroup = strData[i:j]
        if strGroup == ‘‘ :
            break
        strEnData += Encrypt(strGroup, key)
        i += 4
        j += 4
        
    print("加密后: %s\\r\\n" % strEnData)
    strDeData = ""
    i = 0
    j = 4
    
    while True :
        strGroup = strEnData[i:j]
        if strGroup == ‘‘ :
            break
        strDeData += Decrypt(strGroup, key)
        i += 4
        j += 4
        
    print("解密后: %s\\r\\n" % strDeData)
    

原数据: Hello World!

加密后: yW_X^d[C^W

解密后: Hello World!

 

以上是关于分组密码模式: ECB模式(电子密码本模式)的主要内容,如果未能解决你的问题,请参考以下文章

分组密码的五种工作模式

对称加密算法的分组模式及其Go语言实现

密码技术--分组密码的加密模式

分组密码模式: CBC模式(密码分组链接模式)

《图解密码技术》Chapter4:分组密码的主要模式

高级加密标准AES的工作模式(ECBCBCCFBOFB)