Vigenere 密码解密问题

Posted

技术标签:

【中文标题】Vigenere 密码解密问题【英文标题】:Vigenere Cipher Decryption Issues 【发布时间】:2020-03-22 00:04:13 【问题描述】:
key = "password"
def cipher(text): #my example cipher method
    encoded_chars = []
    for i in range(len(text)):
        key_c = key[i % len(key)]
        encoded_c = chr(ord(text[i]) + ord(key_c) % 256)
        encoded_chars.append(encoded_c)
    encoded_string = ''.join(encoded_chars)
    return (encoded_string)


def decipher(text):
    dec = []
    text = base64.urlsafe_b64encode(b"'text'").decode()
    print('text')
    for i in range(len(text)):
        key_c = key[i % len(key)]
        dec_c = chr((256 + ord(text[i]) - ord(key_c)) % 256)
        dec.append(text)
    return str(dec_c)
    enter code here
print(decipher("test"))

使用 vigenere 密码成功加密后,我得到如下信息:b'\xc2\xbd\xc2\xb8\xc3\x83\xc3\x80' 我想用上面的代码解密这个字符串,然后把它变成文本“密码”,但是当我尝试解密我的文本时,它给我留下了另一个编码的字符串。有人可以解释我在解密时做错了什么吗?

【问题讨论】:

【参考方案1】:

不清楚你想用 base64 库做什么。此外,您在解密方法中混合了变量:

    dec.append(text) # text is the passed in argument.
                     # Why append it to the result
return str(dec_c)    # this is the last element in the loop
                     # why return this rather than the list you made above?

以上两件事都没有多大意义。也许这样的事情会让它朝着正确的方向发展:

key = "password"
def cipher(text): #my example cipher method
    encoded_chars = []
    for i in range(len(text)):
        key_c = key[i % len(key)]
        encoded_c = chr(ord(text[i]) + ord(key_c) % 256)
        encoded_chars.append(encoded_c)
    encoded_string = ''.join(encoded_chars)
    return (encoded_string)


def decipher(text):
    dec = []
    for i in range(len(text)):
        key_c = key[i % len(key)]
        dec_c = chr((256 + ord(text[i]) - ord(key_c)) % 256)
        dec.append(dec_c)
    return "".join(dec)

plain = "some text to encrypt"

encrypted = cipher(plain)
print("encrypted: ", encrypted)

decrypted = decipher(encrypted)   
print("decrypted: ", decrypted)

打印:

encrypted:  ãÐàØã×ÜäçâÔàÇâÚãç
decrypted:  some text to encrypt

【讨论】:

等等,我想我明白发生了什么,但是我仍然有点困惑,当我尝试将返回的文本写入文本文件时,它会像这些字节一样出现字符串?我是不是没听懂?

以上是关于Vigenere 密码解密问题的主要内容,如果未能解决你的问题,请参考以下文章

用于解密的 Vigenere 密码“字符串索引超出范围”

使用修改后的 Vigenere 密码算法,解密不会导致原始输入 [关闭]

尝试加密/解密时出现 vigenere 密码错误

Python 中的 Vigenere 密码

Java 中的 Vigenere 密码算法 - 将消息解密为明文

python 简单的加密/解密算法(Vigenere密码)