zoukankan      html  css  js  c++  java
  • Security and Cryptography in Python

    Security and Cryptography in Python - Substitution Cipher

    A Substitution Cipher has

    [26! = 403291461126605635584000000 ]

    possible permutations / possible keys.

    [26! = 403291461126605635584000000 ]

    [2^88 = 309485009821345068724781056 ]

    Hence a 88 bit security.

    Encryption

    import random
    
    def generate_key():
        letters = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
        cletters = list(letters)
        key = {}
        for c in letters:
            key[c] = cletters.pop(random.randint(0,len(cletters) - 1))
        return key
    
    key = generate_key()
    print(key)
    

    First Running Result:

    image-20210203200048320

    Second Running Result:

    image-20210203200117372

    import random
    
    def generate_key():
        letters = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
        cletters = list(letters)
        key = {}
        for c in letters:
            key[c] = cletters.pop(random.randint(0,len(cletters) - 1))
        return key
    
    def encrypt(key, message):
        cipher = ""
        for c in message:
            if c in key:
                cipher += key[c]
            else:
                cipher += c
        return cipher
    
    key = generate_key()
    print(key)
    message = "YOU ARE AWESOME"
    cipher = encrypt(key, message)
    print(cipher)
    

    First Running Result:

    image-20210203200823746

    Second Running Result:

    image-20210203201000900

    Decryption

    import random
    
    def generate_key():
        letters = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
        cletters = list(letters)
        key = {}
        for c in letters:
            key[c] = cletters.pop(random.randint(0,len(cletters) - 1))
        return key
    
    def encrypt(key, message):
        cipher = ""
        for c in message:
            if c in key:
                cipher += key[c]
            else:
                cipher += c
        return cipher
    
    def get_decrypt_key(key):
        dkey = {}
        for k in key:
            dkey[key[k]] = k
        return dkey
    
    key = generate_key()
    print(key)
    message = "YOU ARE AWESOME"
    cipher = encrypt(key, message)
    print(cipher)
    dkey = get_decrypt_key(key)
    message = encrypt(dkey, cipher)
    print(message)
    

    First Running Result:

    image-20210203201743085

    Second Running Result:

    image-20210203201850066

    相信未来 - 该面对的绝不逃避,该执著的永不怨悔,该舍弃的不再留念,该珍惜的好好把握。
  • 相关阅读:
    想要在控件里面使用触发器,只需要将下面代码填入控件中间即可
    WPF有关控件和模板样式设计的微软官方文档
    XDG0062 XAML 与XDG0008 XAML 错误的解决办法
    在WPF中一种较好的绑定Enums数据方法
    FrameworkElementFactory中的SetBinding与SetValue
    线性表结构:栈
    关于链表的一些问题
    使用Mybatis-Plus的一个坑
    双向链表和双向循环链表
    上下文切换的确切含义了解下
  • 原文地址:https://www.cnblogs.com/keepmoving1113/p/14369539.html
Copyright © 2011-2022 走看看