Écrivez un programme ou une fonction (ou un ensemble de programmes / fonctions) pour crypter et décrypter les données en fonction des spécifications suivantes:
Chiffrement
Calculez un hachage XOR de l'entrée en XOR-ing chaque octet avec l'autre.
XOR chaque octet de l'entrée par ce hachage.
Décale le résultat de quatre bits vers la gauche.
Remplissez le côté gauche avec les quatre premiers bits du hachage XOR.
Remplissez le côté droit avec les quatre derniers bits du hachage XOR.
Exemple
Entrée donnée:
"G0lf"
(0x47306C66
)Calculer le hachage XOR:
0x47 ^ 0x30 ^ 0x6C ^ 0x66 = 0x7D
XOR chaque octet par hachage:
0x3A4D111B
Résultat attendu (après shift et pad):
"s¤Ñ\x11½"
(0x73A4D111BD
)
Règles
Votre programme / fonction peut entrer / sortir de n'importe quel type qui a du sens dans la langue de golf de votre choix (chaîne, tableau d'octets, etc.) tant que l'entrée / sortie sont les octets réels. Par exemple, vous ne pouvez pas générer de chaîne hexadécimale.
Le chiffrement et le déchiffrement peuvent être séparés dans des programmes séparés (le score sera leur taille combinée) ou un seul. Les méthodes uniques peuvent prendre un argument pour savoir si elles doivent chiffrer ou déchiffrer.
L'entrée pour le chiffrement peut avoir une taille d'au moins 1 octet.
L'entrée pour le déchiffrement peut être d'au moins 2 octets.
Les octets non imprimables n'ont pas besoin d'être échappés dans la sortie.