21 lines
644 B
Racket
21 lines
644 B
Racket
#lang racket
|
|
(define chr integer->char)
|
|
(define ord char->integer)
|
|
|
|
(define (encrypt msg key)
|
|
(define cleaned
|
|
(list->string
|
|
(for/list ([c (string-upcase msg)]
|
|
#:when (char-alphabetic? c)) c)))
|
|
(list->string
|
|
(for/list ([c cleaned] [k (in-cycle key)])
|
|
(chr (+ (modulo (+ (ord c) (ord k)) 26) (ord #\A))))))
|
|
|
|
(define (decrypt msg key)
|
|
(list->string
|
|
(for/list ([c msg] [k (in-cycle key)])
|
|
(chr (+ (modulo (- (ord c) (ord k)) 26) (ord #\A))))))
|
|
|
|
(decrypt (encrypt "Beware the Jabberwock, my son! The jaws that bite, the claws that catch!"
|
|
"VIGENERECIPHER")
|
|
"VIGENERECIPHER")
|