With "not great" you probably mean that the periodicity is low: there are pseudo-seeds where the periodicity is less than 30.
The quality of the output of the algorithm is also very sensitive to the value of seed (line 10).

The quality of the output of the algorithm is also very sensitive to the value of seed (line 10).

I was well aware of this that is why I used a variable instead of a fixed value inside line 25.
The idea was to use the last byte read as the next "seed" but I didn't pursue it any further. "seed" must always
have a value greater than or equal to 1 and less than or equal to decimal value 256 added to the current byte in use.
(I assumed you guys would see the flaw and correct as you need.)
However if the current byte value would be zero then "seed" would have to be a minimum value of "1".
(This is taken care of with the limitation of fixing "seed" in the script shown.)
Not because of anything to do with binary zero in shell scripting per-se but it would just stop there until the
loop finished and give that character value at that point continuously ( <- if that sentence is lucid enough. ).

Bazza...

EDIT: Made more lucid.

This is a simple way of making it a little better without the complexity of storing the previous and current
bytes read. (Line 26.)