如何在Perl脚本中加密或隐藏密码?

时间:2009-03-03 00:23:59

标签: perl encryption passwords expect

我正在使用Perl脚本,使用Expect通过telnet登录到远程计算机(不要问,必须使用telnet)。我还会根据需要执行p4登录操作,并使用expect来输入正确的密码。现在我只是从明文环境变量中读取密码,即export PASSWORD=password,我知道安全性并不好。

为多个系统需要大量密码的脚本存储密码的最佳方法是什么?以某种方式在文本文件中加密?或其他什么?

请记住,我无法轻易更改现有系统,例如我无法真正安装SSH或类似的东西。

6 个答案:

答案 0 :(得分:10)

可能你最好的方法是将密码放在一个单独的文件中,并锁定该文件的安全性,这样只有你具有读访问权限。遗憾的是,如果您在脚本中存储加密密码,则还必须存储解密方法,以便攻击者可以运行解密并恢复密码。

答案 1 :(得分:7)

之前有一个非常相似的问题,请参阅my answer

简而言之,人类必须开始信任链。其他一切都是混淆。

答案 2 :(得分:5)

如果您使用telnet,为什么要担心脚本中的密码?一个假定的攻击者会发现从远程计算机上捕获数据比从远程计算机上捕获数据更容易或更容易,并且在任何情况下都没有任何关于它的事情。

这听起来像是试图将酒吧放在窗户中并让门开着摆动。

答案 3 :(得分:2)

由于您已经在使用expect,因此您应该考虑在包含密码的加密文件上重定向gpg -d。将密码存储在系统环境变量中是完全错误的。将在启动时输入用于解密gpg文件的密码,然后从文件加载所有密码并运行您的东西。然后你就完成了,所以在应用程序运行时密码只存在于纯文本中。

编辑只是作为旁注,将任何密码放入脚本都是不好的;请记住,脚本只是一个纯文本文件,这使得密码看起来很容易。同样,即使您编译的应用程序也可以使用“字符串”进行反转,这些字符串可以查找代码中包含的字符串(通常是密码)。

答案 4 :(得分:2)

如果您使用的是Mac OS X,我找到了this nifty way to grab usernames and passwords from your Keychain

更新:截至2013年7月22日,该链接似乎已被破坏。以下bash代码段显示了我如何使用该技术(下载iTunes销售数据):

domain="itunesconnect.apple.com"
user="user@example.com"
pass=$(security find-internet-password -ws $domain -a $user)

答案 5 :(得分:0)

我喜欢将密码放在单独文件中的解决方案。此外,您可以散列实际密码,就像在/ etc / passwd中完成的那样。虽然您可以对所有这些使用相同的哈希键,具体取决于您的应用程序。显然,这样做的缺点是有人必须输入哈希键才能运行你的脚本而这不会在批处理环境中工作。

从这个stackoverflow question

开始学习哈希的一个地方