Nombre binaire toujours sur un octet:
Résolu
Ben
-
Ben -
Ben -
Bonjour,
Je dois réaliser un programme cryptage qui crypte un message à l'aide d'une clée.
Pour cela je converti le tout en binaire chaque lettre est associée a son nombre en binaire ( ASCII) . J'ai donc deux liste de même taille, avec des nombres binaires sur un octet.
Le soucis c'est que quand je fais XOR entre deux lettre qui possède une ecriture binaire identique sur les 4 premiers bits (ex : 1010 0101 et 1010 1011 ) python va me renvoyer 1110 et c'est normal. Sauf que moi je veux que tout soit écrit sur un octet.
Voila la ligne de code qui fait le XOR.
Et voila mon code en entier ( il est pas fini car je bloque la dessus justement, je vous laissez quelques print qui peuvent aider la lecture):
Si quelqu'un a un astuce ou une idée je suis prenuer :)
Merci d'avance
Ben
Je dois réaliser un programme cryptage qui crypte un message à l'aide d'une clée.
Pour cela je converti le tout en binaire chaque lettre est associée a son nombre en binaire ( ASCII) . J'ai donc deux liste de même taille, avec des nombres binaires sur un octet.
Le soucis c'est que quand je fais XOR entre deux lettre qui possède une ecriture binaire identique sur les 4 premiers bits (ex : 1010 0101 et 1010 1011 ) python va me renvoyer 1110 et c'est normal. Sauf que moi je veux que tout soit écrit sur un octet.
Voila la ligne de code qui fait le XOR.
for i in range(len(message_bin)): message_cryptee.append(bin(int(message_bin[i])^int(cle_bin[i]))[2:])
Et voila mon code en entier ( il est pas fini car je bloque la dessus justement, je vous laissez quelques print qui peuvent aider la lecture):
##Section Sécurisation des communications: def chiffrement(message, cle): #prend en argument un message (ASCII) et une clé de chiffrement, la fonction renvoie une chaine de caractère soit le messages crypté message_tab = [ lettre for lettre in message] message_bin = [] cle_bin = [] message_cryptee = [] for i in range(len(message)): x = message[i] if i > len(cle)-1: i = i - len(cle)-1 z = cle[i] else: z = cle[i] cle_bin.append(''.join(format(ord(z), 'b'))) message_bin.append( ''.join(format(ord(x),' b'))) print("liste binaire mess",message_bin) print(len(message_bin)) print("liste binaire cle",cle_bin) print(len(cle_bin)) for i in range(len(message_bin)): message_cryptee.append(bin(int(message_bin[i])^int(cle_bin[i]))[2:]) print(message_cryptee) return " ".join(message_cryptee)
Si quelqu'un a un astuce ou une idée je suis prenuer :)
Merci d'avance
Ben
Configuration: Windows / Firefox 98.0
A voir également:
- Nombre binaire toujours sur un octet:
- Binaire - Guide
- Nombre de jours entre deux dates excel - Guide
- Nombre facile - Télécharger - Outils professionnels
- Ascii nombre de caractères - Guide
- Mettre un 0 devant un nombre dans excel - Guide
1 réponse
Bonjour,
On peut utiliser un format d'affichage
et une fois que cela fonctionne, et est compris, on peut supprimer x et y et mettre la valeur directement dans ord()
On peut utiliser un format d'affichage
08b, longueur fixe 8, en conservant les zéro de tête. Pour ta cle plus courte que le message, tu peux utiliser modulo pour récupérer une position dans clé.
##Section Sécurisation des communications: def chiffrement(message, cle): #prend en argument un message (ASCII) et une clé de chiffrement, la fonction renvoie une chaine de caractère soit le messages crypté message_bin = [] cle_bin = [] message_crypte = [] for i in range(len(message)): x = message[i] z = cle[i%len(cle)] print(x,z) cle_bin.append(''.join(format(ord(z),'08b'))) message_bin.append(''.join(format(ord(x),'08b'))) print("liste binaire mess",message_bin) print(len(message_bin)) print("liste binaire cle ",cle_bin) print(len(cle_bin)) for i in range(len(message_bin)): message_crypte.append('{:08b}'.format(int(message_bin[i],2)^int(cle_bin[i],2))) print(message_crypte) return " ".join(message_crypte) print(chiffrement('bonjour','B')) print(chiffrement('bonjour','bonjour'))
et une fois que cela fonctionne, et est compris, on peut supprimer x et y et mettre la valeur directement dans ord()
Et ça me rajoute des 0 autant qu'il faut pour que len(x) soit égale à 8.
Bonne journée