Pues he estado mirando el código, y si no lo estoy interpretando mal, simplemente te limitas a calcular una constante (seg) y se la sumas a cada valor del mensaje en claro, no??
Es decir... que si criptoanalizas un poquito, podrías ver que hay ciertos patrones repetitivos... unos valores se repetirían más que otros (como por ejemplo las vocales). Entre toda esa información y haciendo unos cálculos estadísticos, se podría ver con que probabilidad aparece cada valor, y comparando eso con las probabilidades de aparecer que tiene cada letra en español, seguramente se podría descifrar. E incluso sin hacer la parte estadística, se podría buscar alguna posible asociación entre los valores del mensaje cifrado y las letras del español, e ir viendo si se producen pares o tripletas de letras que puedan darse en las palabras del idioma (por ejemplo, "pqr" sería descartado).
Otra cosilla en la que me he fijado, y si estoy en lo correcto, pides una contraseña, pero sólo empleas sus 4 primeros caracteres para calcular esa constante, no?? Es decir, que por fuerte ylarga que fuera la contrasña daría igual, porque eso no lo estás teniendo en cuenta.