Напишіть програму або функцію (або набір програм / функцій) для шифрування та дешифрування даних з урахуванням наступних специфікацій:
Шифрування
Обчисліть ХОР хеш вхідних даних, по XOR-кожний байт один з одним.
XOR кожен байт вводу цього хеша.
Зсуньте результат на чотири біти вліво.
Прокладіть ліву сторону першими чотирма бітами хеша XOR.
Прокладіть праву сторону останніми чотирма бітами хешу XOR.
Приклад
Даний вхід:
"G0lf"
(0x47306C66
)Обчисліть хеш XOR:
0x47 ^ 0x30 ^ 0x6C ^ 0x66 = 0x7D
XOR кожен байт по хешу:
0x3A4D111B
Очікуваний результат (після зміни та майданчика):
"s¤Ñ\x11½"
(0x73A4D111BD
)
Правила
Ваша програма / функція може вводити / виводити будь-який тип, який має сенс у вашій мові для гольфу (String, Byte Array тощо) , якщо введення / вихід є фактичними байтами. Наприклад, ви не можете виводити шістнадцятковий рядок.
Шифрування та дешифрування можна розділити на окремі програми (оцінка буде їх комбінованим розміром) або на одну. Одиничні методи можуть взяти аргумент щодо того, чи слід шифрувати чи розшифровувати.
Вхід для шифрування можна очікувати розміром щонайменше 1 байт.
Вхідні дані для дешифрування можуть бути принаймні 2 байтами.
Невидані байти не потрібно уникати у висновку.