我正在尝试在golang中使用端到端加密实现一个小型聊天服务器。启动服务器groupby
和客户端https://github.com/adonovan/gopl.io/tree/master/ch8/chat的示例我偶然发现https://github.com/adonovan/gopl.io/blob/master/ch8/netcat3/netcat.go在Go中加密和解密。
加密功能:
ciphertext := encrypt([]byte(os.Stdin), "password")
mustCopy(conn, ciphertext)
conn.Close()
在func main()中:
bytes.NewBuffer([]byte(os.Stdin))
os.Stdin是os.file,而它需要作为[] byte。解决方案应该是io.Reader或通过缓冲区,但我找不到可行的解决方案。
我试过
reader := bytes.NewReader(os.Stdin)
和
{{1}}
任何输入都非常受欢迎。对不起,如果我没有在这里看到明显的问题/解决方案,因为我很新。
答案 0 :(得分:3)
os.Stdin
是io.Reader
。您无法将其转换为[]byte
,但您可以从中读取,以及从中读取的数据,可以将其读入[]byte
。
由于从os.Stdin
读取的许多终端按行提供数据,因此您应该从中读取完整的一行。从os.Stdin
读取可能会阻止,直到有完整的行。
为此你有很多可能性,一个是使用bufio.Scanner
。
这是你可以做到的:
scanner := bufio.NewScanner(os.Stdin)
if !scanner.Scan() {
log.Printf("Failed to read: %v", scanner.Err())
return
}
line := scanner.Bytes() // line is of type []byte, exactly what you need