3101 - XORCrypt

From Bitnami MediaWiki

Cerinţa[edit | edit source]

Se citește un text de maxim 256 caractere și o cheie de număr egal de caractere cu textul citit. După aplicarea Encripției XOR, caracterele rezultate se vor afișa în format binar deoarece în majoritatea cazurilor se obțin caractere neprintabile.

Encripția XOR presupune aplicarea operatorului pe biți XOR între text și cheie, între fiecare caracter din text și caracterul din cheie de pe aceeași poziție cu cel din text: text[i] XOR cheie[i]. Pentru decriptare, operatorul se aplică între cheie și textul criptat.

Date de intrare[edit | edit source]

Fișierul de intrare xorcryptin.txt conține:
  1. Pe prima linie un text format din maxim 256 caractere.
  2.Pe a doua linie cheia, de lungime egală cu textul.

Date de ieșire[edit | edit source]

Fișierul de ieșire xorcryptout.txt va conține o singură linie, având caracterele în format binar separate prin spațiu.

Restricţii şi precizări[edit | edit source]

  • Se va folosi alfabetul englez.

Exemplu 1[edit | edit source]

xorcryptin.txt
xor
key
xorcryptout.txt
Datele de intrare corespund restrictiilor impuse
00010011 00001010 00001011


Exemplu 2[edit | edit source]

xorcryptin.txt
xor10
key
xorcryptout.txt
Datele de intrare nu corespund restrictiilor impuse


Explicatie[edit | edit source]

x^k -> 00010011

o^e -> 00001010

r^y -> 00001011

Rezolvare[edit | edit source]

<syntaxhighlight lang="python" line> def xor_encrypt(text, key):

   # Aplică encripția XOR pe text cu cheia dată
   return ' '.join([format(ord(a) ^ ord(b), '08b') for a, b in zip(text, key)])


def main():

   with open('xorcryptin.txt', 'r') as fin, open('xorcryptout.txt', 'w') as fout:
       text = fin.readline().strip()
       key = fin.readline().strip()
       # Verifică dacă textul și cheia respectă restricțiile
       if len(text) > 256 or len(key) != len(text) or not all(c.isalpha() or c.isspace() for c in text):
           fout.write("Datele de intrare nu corespund restrictiilor impuse\n")
           return
       fout.write("Datele de intrare corespund restrictiilor impuse\n")
       # Aplică encripția XOR pe text cu cheia dată și scrie rezultatul în fișierul de ieșire
       fout.write(xor_encrypt(text, key) + '\n')


if __name__ == "__main__":

   main()


</syntaxhighlight>