如何在Vigenere密码中包括标点和空格[Python]

2024-09-26 18:17:36 发布

您现在位置:Python中文网/ 问答频道 /正文

我想做一个维格纳密码解密器。消息将使用我编写的当前代码进行解密。但是,它没有考虑标点符号和空格。我如何使它考虑到这两个组成部分?以下是我的代码:

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))

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


Tags: 代码inmessageforlenaslengthkeyword
1条回答
网友
1楼 · 发布于 2024-09-26 18:17:36

试试这个

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))

输出:

^{pr2}$

请注意,您应该将字符串以原始格式分配给变量,否则字符串中的\"'等字符会在程序流中造成中断。在

使用这个:

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!'

相关问题 更多 >

    热门问题