# PBinfo #3101 – XORCrypt – Rezolvare C++

Sursa: Codul lui Andrei
Limbaj: C++
Autor rezolvare: Darius

## Enunț

Cerința
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
Fișierul de intrare xorcrypt.in conține:

Pe prima linie un text format din maxim 256 caractere.
Pe a doua linie cheia, de lungime egală cu textul.


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

Restricții și precizări

Se va folosi alfabetul englez.

Exemplu:
xorcrypt.in

xor
key
xorcrypt.out

00010011 00001010 00001011
Explicație
x^k -> 00010011
o^e -> 00001010
r^y -> 00001011

## Cod sursă C++

```cpp
//Afisare folosind o functie.
#include <fstream>
#include <string>
using File = std::fstream;
File in, out;
void CharBitPrint(char c)
{
    for(int i=7; i>=0; i--) out<<((c>>i)&1);
    out<<' ';
}
std::string text, key;
char xored;
int main()
{
	in.open("xorcrypt.in", File::in);
	out.open("xorcrypt.out", File::out | File::trunc);
    std::getline(in, text);
    std::getline(in, key);
    for(std::string::size_type i=0; i<text.size(); i++)
    {
        xored=text[i]^key[i];
        CharBitPrint(xored);
    }
    return 0;
}
```

## Resurse

- [Pagina originală](https://codulluiandrei.ro/rezolvari/pbinfo/3101)
- [Sursa C++](https://codulluiandrei.ro/rezolvari/pbinfo/3101/cod.cpp)
- [Sursa pe GitHub](https://raw.githubusercontent.com/codulluiandrei/pbinfo/main/pbinfo-3101/main.cpp)
- [Cursuri de informatică pentru BAC](https://codulluiandrei.ro/academia/info-curs/pachet-cpp/)
