在Go中获得PASWD功能吗?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (13)

希望能够从stdin控制台获取密码输入,但是,当然,不需要回显用户输入的内容。

Go中有类似getpasswd功能的东西吗?(谷歌的Go语言)

我试着使用syscall.read,但它与键入的内容相呼应。

提问于
用户回答回答于

你可以通过强制stty -echo关闭回显,然后stty echo在读取密码后重新打开它来做到这一点

用户回答回答于

以下是完成它的最佳方法之一。首先获取terminalgo get golang.org/x/crypto/ssh

package main

import (
    "bufio"
    "fmt"
    "os"
    "strings"
    "syscall"

    "golang.org/x/crypto/ssh/terminal"
)

func main() {
    username, password := credentials()
    fmt.Printf("Username: %s, Password: %s\n", username, password)
}

func credentials() (string, string) {
    reader := bufio.NewReader(os.Stdin)

    fmt.Print("Enter Username: ")
    username, _ := reader.ReadString('\n')

    fmt.Print("Enter Password: ")
    bytePassword, err := terminal.ReadPassword(int(syscall.Stdin))
    if err == nil {
        fmt.Println("\nPassword typed: " + string(bytePassword))
    }
    password := string(bytePassword)

    return strings.TrimSpace(username), strings.TrimSpace(password)
}

http://play.golang.org/p/l-9IP1mrhA

扫码关注云+社区