Napisz program lub funkcję (lub zestaw programów / funkcji) do szyfrowania i deszyfrowania danych, biorąc pod uwagę następującą specyfikację:
Szyfrowanie
Oblicz hash XOR danych wejściowych przez XOR-ing każdy bajt ze sobą.
XOR każdy bajt danych wejściowych tego skrótu.
Przesunąć wynik o cztery bity w lewo.
Wypełnij lewą stronę pierwszymi czterema bitami skrótu XOR.
Wypełnij prawą stronę ostatnimi czterema bitami skrótu XOR.
Przykład
Biorąc pod uwagę dane wejściowe:
"G0lf"
(0x47306C66
)Oblicz skrót XOR:
0x47 ^ 0x30 ^ 0x6C ^ 0x66 = 0x7D
XOR każdy bajt według skrótu:
0x3A4D111B
Oczekiwany wynik (po zmianie i padzie):
"s¤Ñ\x11½"
(0x73A4D111BD
)
Zasady
Twój program / funkcja może wprowadzać / wyprowadzać dowolny typ sensu w wybranym języku golfowym (String, Byte Array itp.), O ile dane wejściowe / wyjściowe są rzeczywistymi bajtami. Na przykład nie można wyprowadzać ciągu szesnastkowego.
Szyfrowanie i deszyfrowanie można rozdzielić na osobne programy (wynikiem będzie ich łączny rozmiar) lub jeden. Pojedyncze metody mogą argumentować, czy powinny szyfrować, czy deszyfrować.
Dane wejściowe do szyfrowania mogą mieć co najmniej 1 bajt.
Dane wejściowe do deszyfrowania mogą mieć co najmniej 2 bajty.
Bajki niedrukowalne nie muszą być poprzedzane znakami ucieczki.