Overall,
wombat, I think you had a great idea for your program, and though I haven't studied the entirety of the program, I was thinking about that thing that
arhuman was commenting on... and that was "If Crypt::Random is really random (and it seems to be) then you won't be able to decrypt the ciphered message giving the same seed." And that's something important to think about... make sure to not have it randomize to the point of not being able to reconvert the information after being scrambled!! Although you probably have already considered this, hope my opinion helps a bit!! Later.
bladx ~ ¡muchas veces tengo preguntas!