Encryption 创建CLI:如何使用配置文件中的密码?

Encryption 创建CLI:如何使用配置文件中的密码?,encryption,go,command-line-interface,Encryption,Go,Command Line Interface,我正在使用Go编写CLI,并希望将密码保存到保存在用户主目录中的配置文件中 我是否应该在保存时加密密码,并在将密码发送到CLI与之交互的服务器时解密密码 如果是这样的话,go图书馆中是否有一个好的内置图书馆可以这样做?我想让它尽可能简单,不使用任何额外的外部包。我看到的所有答案都很复杂 应该是这样的: func Encrypt(password string) string func Decrypt(password string) string 有什么想法吗?免责声明:核心库不提供现成的功能

我正在使用Go编写CLI,并希望将密码保存到保存在用户主目录中的配置文件中

我是否应该在保存时加密密码,并在将密码发送到CLI与之交互的服务器时解密密码

如果是这样的话,go图书馆中是否有一个好的内置图书馆可以这样做?我想让它尽可能简单,不使用任何额外的外部包。我看到的所有答案都很复杂

应该是这样的:

func Encrypt(password string) string
func Decrypt(password string) string

有什么想法吗?

免责声明:核心库不提供现成的功能。有一个用于Go的第三方lib(来自Docker)可以提供帮助

现代操作系统提供了以安全方式存储机密的工具和API

  • 苹果:钥匙链
  • Linux:特勤局
  • Windows:凭据管理器API
Git和Docker使用这些工具来存储您的凭据

大卫·卡拉维拉(David Calavera)为Docker Engine v1.11撰文,标题为2016年。本文描述了这个问题,它是Linux的一个简单实现,并展示了如何使用这个库

主程序包
进口(
“github.com/docker/docker凭证助手/客户端”
“github.com/docker/docker凭据帮助程序/凭据”
)
var nativeStore=client.NewShellProgramFunc(“docker凭证加密服务”)
func main(){
c:=&credentials.credentials{
服务器URL:“https://api.github.com",
用户名:“令牌”,
秘密:“我的超级秘密令牌”,
}
客户商店(nativeStore,c)
storedCreds,err:=client.Get(nativeStore,“https://api.github.com")
}
Docker credential helpers的缺点是,它希望您安装其二进制文件,并且需要CGo。我专门添加了Docker解决方案,因为在评论中提到了它,但是有类似的库。

  • -最初是AWS vault库的一部分
  • -一个纯Go实现,其目标是避免C绑定

无论您做什么,以任何形式存储密码并仅由应用程序解码而不使用用户的机密信息(例如另一个密码)都是不安全的。因此,如果我没有设置任何机密,任何CLI(例如docker)如何将我的密码保存到docker配置文件中?我不知道docker是如何做到的,最有可能使用AES和保存在Docker代码或其他文件中的密钥。但是,如果有人可以访问Docker的代码或此密钥文件,则加密的密码也可以轻松解密。这样做的唯一优点是看不到comfig文件中的明文密码。Go的标准库支持AES算法,您也可以这样做。是的,主要目标是不在文件中写入普通测试密码。但是我想base64就像加密密码一样,没有任何秘密。谢谢不,用AES方法。比如问用户一个常规密码(有点容易记住),然后用pwgen之类的工具生成docker配置文件的密码。然后用用户密码加密此密码。别忘了在文件上加上正确的权限!!这看起来是个好主意。向上投票。