密码加密和密码存储-Perl

密码加密和密码存储-Perl,perl,encryption,Perl,Encryption,我们有一些使用密码登录系统的脚本。这些密码存储在ini文件中,由脚本(Perl)使用 我正在考虑将密码加密存储(目前不确定使用哪个包),并在Perl代码中对其进行解密 但是从逻辑上讲,将密码加密和解密逻辑存储在代码中是没有意义的 这些文件在源代码管理中,大多数用户都可以访问 想知道有什么更好的方法 我使用Perl,欢迎对我可以使用哪个模块提出任何建议:-) 谢谢 卡提克 另外,Perl文件是一个在服务器中运行的计划脚本,存储在源代码管理工具中。用户对这些脚本没有交互作用,除非有人访问soruce

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

我正在考虑将密码加密存储(目前不确定使用哪个包),并在Perl代码中对其进行解密

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

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

想知道有什么更好的方法

我使用Perl,欢迎对我可以使用哪个模块提出任何建议:-)

谢谢

卡提克


另外,Perl文件是一个在服务器中运行的计划脚本,存储在源代码管理工具中。用户对这些脚本没有交互作用,除非有人访问soruce控件时可以查看这些脚本。

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

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

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


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

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

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

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


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

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

如果需要密码才能访问远程服务,则必须存储密码。无论是否加密,它们都必须放在某个地方,可能在磁盘上,特别是当不是从用户会话(例如GNOME)中运行时

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

最重要的问题是
passwd
file的文件权限。使其仅可供所有者访问,root是最好的

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

cat /opt/some-project/passwd | sudo -U <user> perl /opt/some-project/run-with-passwd-on-stdin
cat/opt/some project/passwd | sudo-U perl/opt/some project/在stdin上使用passwd运行
其中,
是您希望以身份运行脚本的用户(不是root!),并且脚本接收密码文件作为标准输入


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

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

如果需要密码才能访问远程服务,则必须存储密码。无论是否加密,它们都必须放在某个地方,可能在磁盘上,特别是当不是从用户会话(例如GNOME)中运行时

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

最重要的问题是
passwd
file的文件权限。使其仅可供所有者访问,root是最好的

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

cat /opt/some-project/passwd | sudo -U <user> perl /opt/some-project/run-with-passwd-on-stdin
cat/opt/some project/passwd | sudo-U perl/opt/some project/在stdin上使用passwd运行
其中,
是您希望以身份运行脚本的用户(不是root!),并且脚本接收密码文件作为标准输入


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

实际上,这些是Perl中的计划脚本,没有用户交互。@KarthikKrishnan:这没有什么区别。Maciek所描述的策略仍然有效。无论如何,你没有理由要解密加密的密码。如果你这样做了,为什么要首先对它们进行加密呢?Perl内置了C函数
crypt
,而
Digest::MD5
Digest::SHA
是核心模块。请不要在上面提到的软件Maciek和flesk的基础上拼凑出你自己的身份验证方案。看@flesk加密密码的一个原因是,获取明文密码会(稍微)困难一些。在某些情况下,这是有意义的。例如,如果使用sql注入复制数据库,加密的密码会比明文更好。实际上,这些是Perl中的计划脚本,没有用户交互。@KarthikKrishnan:这没有什么区别。Maciek所描述的策略仍然有效。无论如何,你没有理由要解密加密的密码。如果你这样做了,为什么要首先对它们进行加密呢?Perl内置了C函数
crypt
,而
Digest::MD5
Digest::SHA
是核心模块。请不要在上面提到的软件Maciek和flesk的基础上拼凑出你自己的身份验证方案。看@flesk加密密码的一个原因是(稍微)更难获得