Шифр блочный, при кодировании строка дополняется нулями до кратности 8.
Вот кусок кода из скрипта:
for (var f = 0; f < t.length % 8; f ++) t+= "0";
Варианты:
1) Самостоятельно дополнять строку пробелами (или чем удобно) при шифровании
2) Запоминать длину строки вместе с зашифрованной строкой
3) Удалять символы "0" в конце расшифрованной строки (и надеяться что они не будут частью данных)
4) Применить пункт 1 (дополнять символами, которых точно не будет в данных) и затем пункт 3 (удалить эти символы)
5) Внести длину строки в шифруемую строку, чтобы получилось "8;MyString", при расшифровке получить число в начале строки, и обрезать результат.
Лично мне ближе пункт 5.
https://jsfiddle.net/ddhsujv7/2/function myencrypt(key, str) {
var bf = new Blowfish(key);
return bf.encrypt(str.length+";"+str);
}
function mydecrypt(key, enc) {
var bf = new Blowfish(key);
var dec = bf.decrypt(enc);
var len = parseInt(dec);
return dec.substr(String(len).length + 1, len);
}