2017-06-28 8 views
-2

私は、プレーンテキストとキーをASCIIコードに変換し、それらを掛け合わせることで、テキストを暗号化できるコードをいくつか作成しました。私はそれが安全ではないことを知っていますが、私は暗号クラスのためにそれをやっています。ここでこれをデコードするにはどうすればいいですか?

は、私が無駄にencoded/ascii_keyをやって試してみましたが、私のコード

plaintext = input(">> ") 
key = input("key: ") 

def ascii(text): 
    x = 0 

    for i in range(len(text)): 
     x += ord(text[i])*2**(8 * (len(text) -i -1)) 

    #end 

    return x 

#end 

ascii_pt = ascii(plaintext) 
ascii_key = ascii(key) 

# debug 
#print(ascii_pt) 
#print(ascii_key) 

encoded = ascii_pt * ascii_key 

print(encoded) 

です。どんな助けも素晴らしいだろう!

編集

decoded = int(encoded/ascii_key) 

print(chr(decoded)) 

が、これは小さな文字のために働いたが、大規模なものをデコードすることができませんでした:L

+2

のpythonのバージョンを使用していますか?また、[MCVE](https://stackoverflow.com/help/mcve)を提供してください。エラーが発生した場合、サンプル入力、予想される出力、スタックトレースを提供します。 – Kraay89

+0

また、あなたは 'chr()'を正しく使っていないと思いますが、[ここ](https://docs.python.org/2/library/functions.html#chr)を読んでください。これは、単一の文字コードでの使用を意図しています。これは[0、256] – Kraay89

答えて

0

エンコードされたテキストの元の長さは、それを復号化するために知る必要があります。エンコードされた値から推測する方法があるかもしれませんが、常に動作するものは考えられませんでした。

このコードは、ASCIIまたはISO-Latinなどの8ビット文字でのみ機能することに注意してください。この制約を考えると、Python 2.7.13と3.6.1の両方で正しく動作していたようです。

from __future__ import print_function 

#plaintext = input(">> ") 
#key = input("key: ") 

# hardcode for testing 
plaintext = 'All Your Base Are Belong To Us' 
key = 'secret' 

def encode(text): 
    x = 0 
    length = len(text) 
    for i in range(length): 
     x += ord(text[i]) * (2 ** (8 * (length-i-1))) 

    return x 

def decode(value, length): 
    x = value 
    chars = [] 
    for i in range(length-1, -1, -1): 
     shift = 2 ** (8 * (length-i-1)) 
     mask = 0xff * shift 
     ch = (x & mask) // shift 
     chars.append(chr(ch)) 
     x -= ch * shift 

    return ''.join(reversed(chars)) 

encode_key = encode(key) 
encode_pt = encode(plaintext) 

print('encode_key:', encode_key) 
print('encode_pt:', encode_pt) 

encoded = encode_pt * encode_key 

print('encoded:', encoded) 
print('encoded:', hex(encoded)) 

decoded = decode(int(encoded // encode_key), len(plaintext)) 

print('decoded:', decoded) 

出力:

encode_key: 126879297332596 
encode_pt: 451536573816692702021325803632147813811389735036878033208035641604986227 
encoded: 57290643205829835202633022894291838201313854456908334242503703290644426431694418155292 
encoded: 0x1d7d9dc35af66f834a837b1a90a43725666b520a0d802d785d43d3b5213352eaa293171cL 
decoded: All Your Base Are Belong To Us 
関連する問題