Tach,
chr((ord($_) + $$key[$i]) % 256) } split //, $txt;
wenn ich mich nicht irre, sorgst du hier dafür dass nur das letze Schlüsselbyte genutzt wird, dann gäbe es nur 256 verschiedene mögliche Urtexte und das sollte recht einfach per Brute-Force knackbar sein.
mfg
Woodfighter