rot13是英文字母加密里面Caesar Cipher(其实就是移位加密)的一种特殊形式,简单来说就是把字母前后部分对调,其中a和n对调,以此类推。针对性的简单来做就是直接判断字母所在范围,然后视情况+/-13即可。但是rot13也可以用Caesar Cipher的通用形式来做,移位的公式其实很简单,见下面代码中rot13部分实现,主要代码如下:
1 type rot13Reader struct { 2 r io.Reader 3 } 4 5 func rot13(b byte) byte { 6 if b >= 'a' && b <= 'z' { 7 b = 'a' + (b-'a'+13)%26 8 } 9 if b >= 'A' && b <= 'Z' { 10 b = 'A' + (b-'A'+13)%26 11 } 12 return b 13 } 14 15 func (reader rot13Reader) Read(b []byte) (int, error) { 16 n, err := reader.r.Read(b) 17 if err != nil { 18 return 0, err 19 } 20 for i := 0; i < n; i++ { 21 b[i] = rot13(b[i]) 22 } 23 return n, err 24 }
这个通用形式和rot13的简单形式计算是等价的,稍加推导即可。此外,上面的rot13代码稍加修改,即可改为Caesar Cipher形式。