我编写了以下代码,试图将13位字母数字加密。这是go之旅中的一个例子。 我已经使用日志库来检查字节数组p中的值,在密码之后,它们似乎被旋转了13.由于某种原因,当它打印到STDOUT时,字符不会被加密。 我正在改变字节数组p错误?
package main
import (
"io"
"os"
"strings"
)
type rot13Reader struct {
r io.Reader
}
func cipher(in byte) (out byte) {
out = in
if in > 64 && in < 91 {
out = in - 64
out = out + 13
out = out % 26
out = out + 64
}
if in > 96 && in < 123 {
out = in - 96
out = out + 13
out = out % 26
out = out + 96
}
return
}
func (reader rot13Reader) Read(p []byte) (n int, err error) {
for index := range p {
p[index] = cipher(p[index])
}
n, err = reader.r.Read(p)
return
}
func main() {
s := strings.NewReader(
"Lbh penpxrq gur pbqr!\n")
r := rot13Reader{s}
io.Copy(os.Stdout, &r)
}
答案 0 :(得分:1)
在rot13Reader.Read
方法中,您首先将cipher
应用于p
中的任何数据,然后通过阅读子读取器覆盖该数据。
如果目标是解码您所阅读的内容,则应按相反的顺序执行这两项操作。