• Security and Cryptography in Python


    Security and Cryptography in Python - Stream Ciphers(4)

    Low entropy - Brute force of our Stream Cipher
    import random
    
    class KeyStream:
        def __init__(self, key=1):
            self.next = key
    
        def rand(self):
            self.next = (1103515245*self.next + 12345) % 2**31
            return self.next
    
        def get_key_byte(self):
            return (self.rand()//2**23) % 256
    
    def encrypt(key, message):
        return bytes([message[i]^ key.get_key_byte() for i in range(len(message))])
    
    def transmit(cipher, likely):
        b = []
        for c in cipher:
            if random.randrange(0, likely) == 0:
                c = c ^ 2**random.randrange(0, 8)
            b.append(c)
        return bytes(b)
    
    def modification(cipher):
        mod = [0]*len(cipher)
        mod[10] = ord(' ') ^ ord('1')
        mod[11] = ord(' ') ^ ord('0')
        mod[12] = ord('1') ^ ord('0')
        return bytes([mod[i] ^ cipher[i] for i in range(len(cipher))])
    
    def get_key(message, cipher):
        return bytes([message[i] ^ cipher[i] for i in range(len(cipher))])
    
    def crack(key_stream, cipher):
        length = min(len(key_stream), len(cipher))
        return bytes([key_stream[i] ^ cipher[i] for i in range(length)])
    
    def brute_force(plain, cipher):
        for k in range(2**31):
            bf_key = KeyStream(k)
            for i in range(len(plain)):
                xor_stream = plain[i] ^ cipher[i]
                if xor_stream != bf_key.get_key_byte():
                    break
            else:
                return k
        return False
    
    # This is Alice
    secret_key = random.randrange(0, 2**20)
    print(secret_key)
    key = KeyStream(secret_key)
    header = "MESSAGE: "
    message = header + "My secret message to Bob"
    message = message.encode()
    print(message)
    cipher = encrypt(key, message)
    print(cipher)
    
    # This is Bob
    key = KeyStream(secret_key)
    message = encrypt(key, cipher)
    print(message)
    
    # This is Eve
    bf_key = brute_force(header.encode(), cipher)
    print("Eve's brute force key:", bf_key)
    key = KeyStream(bf_key)
    message = encrypt(key, cipher)
    print(message)
    

    Running Result:

    image-20210206184505484

    相信未来 - 该面对的绝不逃避,该执著的永不怨悔,该舍弃的不再留念,该珍惜的好好把握。
  • 相关阅读:
    20151216JqueryUI---dialog代码备份
    20151215jqueryUI--dialog代码备份
    20151215jquery学习笔记--jqueryUI --dialog(对话框)
    20151214 jquery插件代码备份
    20151213Jquery学习笔记--插件
    javaweb常用工具类及配置文件备份
    Javaweb常用工具类及配置文件备份
    20151212Jquery 工具函数代码备份
    20151212jquery学习笔记--工具函数
    CF976E Well played!
  • 原文地址:https://www.cnblogs.com/keepmoving1113/p/14382442.html
Copyright © 2020-2023  润新知