3101 - XORCrypt
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>