RosettaCodeData/Task/The-ISAAC-Cipher/Sidef/the-isaac-cipher.sidef

21 lines
518 B
Text
Raw Permalink Normal View History

2017-09-23 10:01:46 +02:00
require('Math::Random::ISAAC')
2016-12-05 23:44:36 +01:00
func xor_isaac(key, msg) {
2017-09-23 10:01:46 +02:00
var rng = %O<Math::Random::ISAAC>.new(unpack('C*', key))
2016-12-05 23:44:36 +01:00
2017-09-23 10:01:46 +02:00
msg.chars»ord()» \
-> »^« 256.of{ rng.irand % 95 + 32 }.last(msg.len).flip \
-> «%« '%02X' -> join
2016-12-05 23:44:36 +01:00
}
2017-09-23 10:01:46 +02:00
var msg = 'a Top Secret secret'
var key = 'this is my secret key'
2016-12-05 23:44:36 +01:00
2017-09-23 10:01:46 +02:00
var enc = xor_isaac(key, msg)
var dec = xor_isaac(key, pack('H*', enc))
2016-12-05 23:44:36 +01:00
2017-09-23 10:01:46 +02:00
say "Message: #{msg}"
say "Key : #{key}"
say "XOR : #{enc}"
say "XOR dcr: #{pack('H*', dec)}"