• Security and Cryptography in Python


    Security and Cryptography in Python - Block Cipher(2)

    Double DES
    from pyDes import *
    import random
    
    message = "01234567"
    key_11 = random.randrange(0, 256)
    key_1 = bytes([key_11, 0, 0, 0, 0, 0, 0, 0])
    key_21 = random.randrange(0, 256)
    key_2 = bytes([key_21, 0, 0, 0, 0, 0, 0, 0])
    iv = bytes([0]*8)
    
    k1 = des(key_1, ECB, iv, pad=None, padmode=PAD_PKCS5)
    k2 = des(key_2, ECB, iv, pad=None, padmode=PAD_PKCS5)
    
    # Alice sending the encrypted message
    cipher = k1.encrypt(k2.encrypt(message))
    print("Key 11:", key_11)
    print("Key 21:", key_21)
    print("Encrypted:", cipher)
    
    # This is Bob
    message = k2.decrypt(k1.decrypt(cipher))
    print("Decrypted:", message)
    
    # Eve's attack on Double DES
    lookup = {}
    for i in range(256):
        key = bytes([i, 0, 0, 0, 0, 0, 0, 0])
        k = des(key, ECB, iv, pad=None, padmode=PAD_PKCS5)
        lookup[k.encrypt(message)] = i
    
    for i in range(256):
        key = bytes([i, 0, 0, 0, 0, 0, 0, 0])
        k = des(key, ECB, iv, pad=None, padmode=PAD_PKCS5)
        if k.decrypt(cipher) in lookup:
            print("Key 11:", i)
            print("Key 21:", lookup[k.decrypt(cipher)])
            key_1 = bytes([i, 0, 0, 0, 0, 0, 0, 0])
            key_2 = bytes([lookup[k.decrypt(cipher)], 0, 0, 0, 0, 0, 0, 0])
            k1 = des(key_1, ECB, iv, pad=None, padmode=PAD_PKCS5)
            k2 = des(key_2, ECB, iv, pad=None, padmode=PAD_PKCS5)
            print("Eve break double DES", k2.decrypt(k1.decrypt(cipher)))
            break
    

    Running result:

    image-20210210101022590

    相信未来 - 该面对的绝不逃避,该执著的永不怨悔,该舍弃的不再留念,该珍惜的好好把握。
  • 相关阅读:
    linux将命令添加到PATH中
    查看linux服务器时间
    spring参数校验及全局异常处理
    Https协议的工作过程
    反爬虫方式
    telnet进入某个端口后无法退出
    索引操作
    redis output buffer 设置太小导致oom
    mysql查询课程浏览记录表中最近一周浏览次数最多的课程
    C++ 读写注册表
  • 原文地址:https://www.cnblogs.com/keepmoving1113/p/14395078.html
Copyright © 2020-2023  润新知