У вас классическое переполнение стекового буфера (stack buffer overflow aka buffer overrun).
https://en.wikipedia.org/wiki/Stack_buffer_overflow
Вы не проверяете результат fopen и fscanf() и не контролируете длину данных, считываемых в буфер word фиксированного размера. В данном случае либо fscanf ничего не может считать, и в cryption() вы пытаетесь шифровать мусор, который не заканчивается нулевым байтом, что приводит к переполнению буфера word либо считывается более 10 байт, из-за чего переполняется буфер word. Поскольку буфер объявлен в локальных переменных функции, это приводит к повреждению стека.
Всегда контролируйте возврат из функции (fopen(), scanf(), fscanf(), malloc() в вашем случае) + ограничьте размер вводимой строки размером буфера через форматный спецификатор ("%9s" например)