2 votes

Programme de cryptage ASCII en Python

Bonne journée,

J'ai créé un programme simple de cryptage ASCII et j'ai juste 3 questions à son sujet :

  1. Comment puis-je vérifier si la clé est mal saisie et dire à mon programme de ne pas essayer de décrypter si elle a été mal saisie.
  2. Pourquoi le texte crypté est-il plus long que l'original ?
  3. Si je voulais crypter d'autres choses que du texte ASCII, à quel point cela serait-il difficile ?

Merci, voici mon code et mes résultats ci-dessous :

import time
key = "Thisisôthekey¦b££glkHPAfgbm(*&%$$*(ô"
string = "Encryption the hell out of me, even if I repeatttttttt lettersssss you can't tell"

entext = ""
detext = ""
keycnt=0

print("Displaing Text to be Encrypted")
time.sleep(1)
print(string)
time.sleep(5)

#Loops through the string and the key and adds the ascii values together to create a Encrypted character
for sLetter in string:
    entext += chr(ord(sLetter) + ord(key[keycnt]))
    keycnt += 1
    if keycnt == len(key):
        keycnt =0

print("Displaying encrypted Text")
time.sleep(1)
print(entext)

#Resetting key position
keycnt=0

#Loops through the string and the key and subtracts the ascii values together to create a decrypted character
for sLetter in entext:
    detext += chr(ord(sLetter) - ord(key[keycnt]))
    keycnt += 1
    if keycnt == len(key):
        keycnt =0
time.sleep(2)

print("Displaying decrypted Text")
time.sleep(1)
print(detext)
time.sleep(1)

1voto

owlstead Points 22329

Tout d'abord, l'addition avec les caractères de la clé n'est pas un bon chiffrement, pas même un bon chiffrement César ou Vigenère. Il faudrait une addition modulaire pour cela : soit le module 26 pour l'alphabet normal (mais sans majuscules ni minuscules et autres caractères), soit le module 256 pour les octets. Dans le cas des octets, vous auriez besoin d'une valeur aléatoire pour chaque octet de la clé.

Actuellement, votre texte chiffré est biaisé : si vous ajoutez un caractère de valeur 0x00 à une clé de valeur 0x00, vous obtiendrez 0x00 comme octet de texte chiffré. Le problème est que la valeur 0x00 est jamais atteint qu'avec cette combinaison particulière dans votre schéma de cryptage. Ainsi, si vous voyez la valeur 0x00, vous connaîtrez immédiatement la valeur de la clé et du texte en clair.

Comment puis-je vérifier si la clé est mal saisie et dire à mon programme de ne pas essayer de décrypter si elle a été mal saisie.

Il n'est pas possible de vérifier si la valeur de la clé est correcte ou non. La seule chose que vous pouvez faire est de valider si la sortie correspond à ce que vous attendez.

La cryptographie moderne utilise un code d'authentification de message (MAC) pour créer une étiquette d'authentification. Cette étiquette peut être validée par rapport au texte chiffré et à la clé (ou, pour un système moins sûr, au texte en clair et à la clé). Il existe également des modes de chiffrement authentifiés tels que le GCM, qui sont essentiellement des chiffrages intégrant l'authentification MAC.

Pourquoi le texte crypté est-il plus long que l'original ?

Si vous ajoutez des valeurs dont la valeur est égale ou inférieure à 255, vous obtiendrez des valeurs égales ou inférieures à 510. Ces valeurs nécessitent toutefois deux octets au moins pour être codées.

Si je voulais crypter d'autres choses que du texte ASCII, à quel point cela serait-il difficile ?

Ce n'est pas si difficile : il suffit d'effectuer un XOR ou une addition modulaire (par exemple, modulo 256 pour 8 bits / un octet) avec une clé vraiment aléatoire. Cependant, pour créer quelque chose de sûr, il faut utiliser un tampon à usage unique (où la clé est de la même taille que le texte binaire en clair) ou un chiffrement moderne.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X