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