私は友人から挑戦を受けました。 彼は関数を逆にする必要があると言いました。入力を見つける必要があります。 しかし、私は時間をかけて論理を考えていて、コードで思ったことをどのように書くのか悩んでいます。暗号ブロックチェーンの復号XOR「暗号化」
彼は私にこのアルゴリズムを与えた:
def hash_cbc(input):
initial = 'a'
key = 'netsos'
output = [ord(initial)]
def enc(c, key, i):
z = key[i % len(key)]
return (c + ord(z))^ord(z)
for i in range(len(input)):
prev_char = output[i]
next_char = enc(prev_char, key, i)^ord(input[i])
output.append(next_char)
return output
をこのアルゴリズムの出力は次のようにする必要があります。
97, 194, 299, 411, 533, 654, 768, 873, 965, 1066, 1164, 1272, 1399, 1512, 1603, 1706, 1792, 1895, 1994, 2110, 2215, 2310, 2404, 2517, 2645, 2762
私は入力を得ることができるので、機能を逆にする必要があります。入力は文字列でなければなりません。
助けてください、私は何時間も詰まっており結果がありません。 私はXOR関数を逆にすることを考えていましたが、それを書く方法を本当に混乱させました。
私は、これらのアルゴリズムは 「ENC(prev_char、キーがあるので、ループ
ではなく、私は逆にする方法がわからないことをやって、この
enc(prev_char, key, i)^1st ordinal input = 1st output
enc(prev_char, key, i)^2nd ordinal input = 2nd output
enc(prev_char, key, i)^3rd ordinal input = 3rd output
などをやって考えていました私は混乱させる部分です
私は自分自身のリバースコードを作成しようとしました
def enc(c, key, i):
Awalan = input("Insert numbers: ")
Awalan_split = Awalan.split (', ')
Awalan_len = len(Awalan_split)
initial = 'a'
key = 'netsos'
output = [ord(initial)]
z = key[i % len(key)]
return (c + ord(z))^ord(z)
for i in range(Awalan_len):
prev_char = output[i]
next_char = int(Awalan_split[i])^enc(prev_char, key, i)
char_convert = chr(next_char)
return(char_convert)
print(char_convert)
しかし運がないだけで、空の出力が得られます。 私のコードで何が問題になっていますか?
そして、これを解決するために、あなたの試みで正確に助けが必要ですか? –
私はXOR(^)関数を逆にしようとしていましたが、運がない...アルゴリズムの提案を私に与えることができます –
あなたのために与えられたことをするプログラムを書くことは、ここでやっていることではありません。 StackOverflowは、Q&Aのナレッジベースとして存在するもので、カノニカルな質問(あなた以外の誰かが直面する可能性のある質問)を集めて答えます。あなたがどこにいて、より広範に適用できる潜在的な問題を見つけることができれば、その質問の周辺にある要素を削除して、その適用性をより明確にすることができます。やってみること)が助けになるだろう。 –