; http://www.cap-lore.com/code/Scheme/rc4.html
(let ((Do ((fileVal "Do") 'Do))) (lambda ()
(lambda (key)(let ((s (make-string 256))(i 0)(j 0))
 (Do 256 (lambda(n) (string-set! s n (integer->char n))))
 (let ((len (string-length key))(j 0))
   (Do 256 (lambda (k) (let ((i (- 255 k)))
     (set! j (modulo (+ j (char->integer (string-ref s i))
        (char->integer (string-ref key (modulo i len)))) 256))
     (let ((t (string-ref s i))) (string-set! s i (string-ref s j))
       (string-set! s j t))))))
  (lambda (n)(let ((v 0)) (Do n (lambda (dm)
    (set! i (if (= i 255) 0 (+ i 1)))
    (let* ((a (string-ref s i))(A (char->integer a)))
      (set! j (modulo (+ j A) 256))
      (let* ((b (string-ref s j))(B (char->integer b)))
        (string-set! s i b)(string-set! s j a)
        (set! v (+ (* 256 v) (char->integer
           (string-ref s (modulo (+ A B) 256))))))))) v))))))