J'ai eu un défi de la part de mon ami. Il a dit que je dois inverser la fonction, et j'ai besoin de trouver des entrées. Mais, je suis coincé pendant des heures à penser à la logique et à écrire ce que je pense dans un code.Déchiffrement du chiffrement XOR "chiffrement"
Il m'a donné cet algorithme:
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
la sortie de cet algorithme doit être:
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
Je dois inverser la fonction pour que je puisse obtenir des entrées. Les entrées doivent être une chaîne.
S'il vous plaît aidez-moi, j'ai été bloqué pendant des heures et sans résultats. Je pensais inverser la fonction XOR, mais vraiment confus comment l'écrire.
Je pensais que ces algorithmes faisant
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
etc fais que dans une boucle
mais je ne suis pas sûr de savoir comment inverser, car il est « enc (prev_char, clé, i) "partie qui me rend confus
J'ai également essayé de faire mon propre code inverse
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)
mais pas de chance, cela me donne juste une sortie vide. Quel est le problème avec mon code?
Et où dans vos tentatives pour résoudre ce As-tu besoin d'aide exactement? –
J'essayais de renverser la fonction XOR (^), mais pas de chance ... peut-être vous pouvez me donner une suggestion d'algorithme –
Ecrire un programme qui fait quelque chose pour vous n'est pas ce que nous faisons ici. StackOverflow existe pour être une base de connaissances Q & A - une collection de questions canoniques (que quelqu'un d'autre que vous pourriez faire face) et des réponses à leur sujet. Si vous pouvez trouver une question dans laquelle vous êtes coincé qui a le potentiel d'être plus largement applicable, en supprimant les éléments qui sont périphériques à cette question pour rendre cette applicabilité plus claire (et en concentrant le titre sur * cette question *, vs ce que vous Essayons de faire) serait utile. –