跳到主要内容

ROT13

简介

ROT13(Rotate by 13 Places)是一种简单的替换密码算法,它是一种变种的凯撒密码。ROT13 对于字母表中的字母进行移位,将每个字母移动 13 个位置:

ROT13 算法的主要特点是:

  1. 对于字母表中的每个字母(大小写均可),将其移动 13 个位置。因此,字母 A 替换为 N,B 替换为 O,以此类推,字母 Z 替换为 M。
  2. 非字母字符(如数字、标点符号、空格等)保持不变。

由于 ROT13 对字母进行了相等数量的向前和向后移动,因此应用两次 ROT13 会将文本恢复到原始状态(ROT13(ROT13(str))=str)。这种性质使 ROT13 成为一个简单的加密和解密方法。

ROT13 通常被用于娱乐目的,而不是作为一种强大的加密手段,因为它的加密过程很容易被破解,而且它只能加密字母字符,而不是整个字符集。

实现(Golang)

package main

import (
"io"
"os"
"strings"
)

type rot13Reader struct {
r io.Reader
}

func (rr rot13Reader) Read(p []byte) (n int, err error) {
n, err = rr.r.Read(p)
for i := 0; i < n; i++ {
p[i] = rot13(p[i])
}
return n, err
}

func rot13(b byte) byte {
var base byte
if b >= 'a' && b <= 'z' {
base = 'a'
} else if b >= 'A' && b <= 'Z' {
base = 'A'
} else {
return b
}
return (b-base+13)%26 + base
}

func main() {
s := strings.NewReader("Lbh penpxrq gur pbqr!")
r := rot13Reader{s}
io.Copy(os.Stdout, &r)
}