密码加密和密码存储 - Perl

时间:2012-01-18 07:02:45

标签: perl encryption

我们有一些使用密码登录系统的脚本。这些密码存储在ini文件中,并由脚本(Perl)使用。

我在考虑存储加密的密码(不确定现在使用哪个包)并在Perl代码中对其进行解密。

但从逻辑上讲,将加密密码和解密逻辑存储在代码中是没有意义的。

这些文件位于源代码管理中,大多数用户都可以访问这些文件。

想知道什么是更好的方式。

我使用Perl以及有关我可以使用哪个模块的任何建议: - )

由于

Karthik

P.S。 Perl文件是在服务器中运行的预定脚本,存储在源代码管理工具中。用户没有与这些脚本的交互,除了当有人访问soruce控件时可以查看这些脚本。

2 个答案:

答案 0 :(得分:4)

事实上,这与Perl几乎没有关系。您将主要使用shell和文件系统。

如果您需要密码来访问远程服务,则必须存储它。无论是否加密,它们必须放在某处,可能放在磁盘上,尤其是在不在用户会话中运行时(例如GNOME)。

将密码存储在公共VCS中是一个非常糟糕的主意。您应该只将代码保存在那里,并将密码存储在VCS目录中的单独文件中。例如,如果您在/opt/some-project/scripts中有一份repo副本,请在/opt/some-project/passwd旁边放置密码文件。

最重要的问题是passwd文件的文件权限。只有所有者才能访问它,root是最好的。

然后,在root的crontab中运行这样的脚本:

cat /opt/some-project/passwd | sudo -U <user> perl /opt/some-project/run-with-passwd-on-stdin

其中<user>是您希望运行脚本的用户(不是root!),脚本接收密码文件作为标准输入。

这样,只要文件权限正确且root帐户不受损害,密码文件就会受到保护。

答案 1 :(得分:2)

我认为你根本不应该解密密码。您应该存储密码的md5总和,然后当用户想要登录时,您计算他输入的密码的md5总和,并将其与您在文件中的内容进行比较。

当然还有其他方法,然后md5,这只是一个例子。您可以使用SHA或任何其他单向散列方法。

使用此方法会使您无法恢复忘记密码,您必须生成一个新密码以替换忘记密码。

我不知道Perl,但我打赌有md5或SHA1的可用实现。