base64.rkt
#lang racket/base

(require (prefix-in net: net/base64))

(define (encode input)
   (regexp-replace*
    #rx"[/+]"
    (regexp-replace*
     #rx"\r\n"
     (bytes->string/utf-8 (net:base64-encode input))
     "")
    (λ (match) (if (equal? match "/") "-" "_"))))

(define (decode input)
   (net:base64-decode
    (string->bytes/utf-8
     (regexp-replace*
      #rx"[-_]"
      input
      (λ (match) (if (equal? match "-") "/" "+"))))))

(provide encode decode)