【问题标题】:How to include punctuation and white space in Vigenere Cipher [Python]如何在 Vigenere Cipher [Python] 中包含标点符号和空格
【发布时间】:2019-06-27 12:35:44
【问题描述】:

我正在尝试做一个 Vigenere Cipher 解密器。该消息使用我编写的当前代码解密。但是,它没有考虑标点符号和空格。我如何让它考虑这两个组件?以下是我的代码:

vigenered_message = 'dfc jhjj ifyh yf hrfgiv xulk? vmph bfzo! qtl eeh gvkszlfl yyvww kpi hpuvzx dl tzcgrywrxll!'

keyword = 'friends'

def vigenere_decrypt(encrypted_vigener, keyword):
    keyword_length = len(keyword)
    keyword_as_int = [ord(i) for i in keyword]
    encrypted_vigener_int = [ord(i) for i in encrypted_vigener]
    plaintext = ''
    for i in range(len(encrypted_vigener_int)):
        value = (encrypted_vigener_int[i] - keyword_as_int[i % keyword_length]) % 26
        plaintext += chr(value + 65)
    return plaintext

print(vigenere_decrypt(vigenered_message, keyword))

这个偏移量应该是:'你能解码这个吗?干得好! 你正在成为密码学专家'

【问题讨论】:

    标签: python encryption cryptography caesar-cipher vigenere


    【解决方案1】:

    试试这个

    vigenered_message = r'dfc jhjj ifyh yf hrfgiv xulk? vmph bfzo! qtl eeh gvkszlfl yyvww kpi hpuvzx dl tzcgrywrxll!'
    
    keyword = 'friends'
    
    def vigenere_decrypt(encrypted_vigener, keyword):
        keyword_length = len(keyword)
        keyword_as_int = [ord(i) for i in keyword]
        encrypted_vigener_int = [ord(i) for i in encrypted_vigener]
        plaintext = ''
        for i in range(len(encrypted_vigener_int)):
            if vigenered_message[i].isalpha():
                value = (encrypted_vigener_int[i] - keyword_as_int[i % keyword_length]) % 26
                plaintext += chr(value + 65)
            else:
                plaintext += vigenered_message[i]
        return plaintext
    
    print(vigenere_decrypt(vigenered_message, keyword))
    

    输出:

    YOU WERE ABLE TO DECODE THIS? NICE WORK! YOU ARE BECOMING QUITE THE EXPERT AT CRYTOGRAPHY!
    

    顺便说一句,您应该将字符串分配给原始格式的变量,否则字符串中的\"' 等字符可能会在程序流程中造成中断。

    使用这个:

    vigenered_message = r'dfc jhjj ifyh yf hrfgiv xulk? vmph bfzo! qtl eeh gvkszlfl yyvww kpi hpuvzx dl tzcgrywrxll!'
    

    不是这个:

    vigenered_message = 'dfc jhjj ifyh yf hrfgiv xulk? vmph bfzo! qtl eeh gvkszlfl yyvww kpi hpuvzx dl tzcgrywrxll!'
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-01-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-04-08
      • 2019-08-08
      相关资源
      最近更新 更多