0

プレーンテキストを取り込み、キーを使用して暗号化する Python プログラムを作成しようとしています。Python 2.7.4で書かれています

これはこれまでの私のコードです

def encrypter(intext, shift, modder):
    plain = list(intext)
    out = ''
    j = 0
    key = list(shift)
    for i in plain:
        if mod > 0:
            x = chr((ord(i) + ord(key[(j % (len(plain) - 1)) % len(key)]) - 48) % 58 + 48)
        if mod < 0:
            x = chr(((ord(i) - ord(key[(j % (len(plain) - 1)) % len(key)]) - 48) % 58 + 48))
        out += x
        j += 1
    return out
sel = raw_input("Encrypt (e)/ Decrypt (d)")
if sel == 'e':
    mod = 1
elif sel == 'd':
    mod = -1
else:
    mod = 0
    print('Enter a proper value!')
if mod != 0:
    print(encrypter(raw_input('Enter the text:'), raw_input('Enter the key-phrase:'), mod)

何かを暗号化すると、次のようになります。

C:\Users\aesha_000\py\Scripts\python.exe "D:/Programming/Computing GCSE/Resources/functiontest3.py"
Encrypt (e)/ Decrypt (d)e
Enter the text:alex
Enter the key-phrase:pass
]Yd:

Process finished with exit code 0

しかし、問題は、それを再度復号化すると、間違った出力が得られることです。

C:\Users\aesha_000\py\Scripts\python.exe "D:/Programming/Computing GCSE/Resources/functiontest3.py"
Encrypt (e)/ Decrypt (d)d
Enter the text:]Yd:
Enter the key-phrase:pass
a2e>

Process finished with exit code 0

誰かがこれに対する答えを知っていますか、それとも私はただ愚かですか?

4

1 に答える 1

0

削除する必要があり% 58 + 48ます。印刷可能なASCII文字を使用するために使用していると思いますが、使用しないでください。情報を失っています。

「印刷できないアスキー文字」を表示したい場合は、base64 を使用してください。

于 2015-05-05T12:29:06.560 に答える