Schreiben Sie ein Programm oder eine Funktion (oder eine Reihe von Programmen / Funktionen) zum Ver- und Entschlüsseln von Daten gemäß der folgenden Spezifikation:
Verschlüsselung
Berechnen Sie einen XOR-Hash der Eingabe, indem Sie jedes Byte miteinander XOR-verknüpfen.
XOR jedes Byte der Eingabe von diesem Hash.
Verschieben Sie das Ergebnis um vier Bits nach links.
Füllen Sie die linke Seite mit den ersten vier Bits des XOR-Hashs auf.
Füllen Sie die rechte Seite mit den letzten vier Bits des XOR-Hashs auf.
Beispiel
Eingegebene Eingabe:
"G0lf"
(0x47306C66
)Berechnen Sie den XOR-Hash:
0x47 ^ 0x30 ^ 0x6C ^ 0x66 = 0x7D
XOR jedes Byte von Hash:
0x3A4D111B
Erwartetes Ergebnis (nach Shift und Pad):
"s¤Ñ\x11½"
(0x73A4D111BD
)
Regeln
Ihr Programm / Ihre Funktion kann Eingaben / Ausgaben jeglicher Art in der von Ihnen gewählten Golfsprache (String, Byte Array usw.) vornehmen, solange die Eingaben / Ausgaben die tatsächlichen Bytes sind. Beispielsweise können Sie eine hexadezimale Zeichenfolge nicht ausgeben.
Verschlüsselung und Entschlüsselung können in getrennte Programme (Punktzahl entspricht der kombinierten Größe) oder in ein einzelnes Programm unterteilt werden. Einzelne Methoden können ein Argument annehmen, ob sie verschlüsseln oder entschlüsseln sollen.
Die Eingabe für die Verschlüsselung muss mindestens 1 Byte groß sein.
Die Eingabe für die Entschlüsselung muss mindestens 2 Byte betragen.
Nicht druckbare Bytes müssen in der Ausgabe nicht maskiert werden.