Exercise: rot13Reader

发布时间 2023-08-05 23:19:09作者: 熋霸

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形式。