the_isaac_cipher.sf 564 B

123456789101112131415161718192021222324252627
  1. #!/usr/bin/ruby
  2. #
  3. ## https://rosettacode.org/wiki/The_ISAAC_Cipher
  4. #
  5. require('Math::Random::ISAAC');
  6. func xor_isaac(key, msg) {
  7. var rng = %s'Math::Random::ISAAC'.new(unpack('C*', key));
  8. msg.chars»ord»() \
  9. -> »^« 256.of{ rng.irand % 95 + 32 }.last(msg.len).reverse \
  10. -> «%« '%02X' -> join;
  11. }
  12. var msg = 'a Top Secret secret';
  13. var key = 'this is my secret key';
  14. var enc = xor_isaac(key, msg);
  15. var dec = xor_isaac(key, pack('H*', enc));
  16. say "Message: #{msg}";
  17. say "Key : #{key}";
  18. say "XOR : #{enc}";
  19. say "XOR dcr: #{pack('H*', dec)}";