【问题标题】:How can I encrypt and decrypt passwords in a Perl CGI program?如何在 Perl CGI 程序中加密和解密密码?
【发布时间】:2011-04-10 04:59:45
【问题描述】:

我是 Perl CGI 的新手,使用 ActivePerl、SQLite DB、Apache 服务器和 Windows。 我有一个输入表单,其中包含 ID、名称、密码等字段 在。每当有人输入新条目时,无论他们输入什么密码 应该加密并存储在数据库中的字段。

下次同一个用户输入密码时,它应该被验证。现在 我想需要一个解密函数或代码。

我发现了一种叫做 MD5 加密的东西。请问谁能给 我对此有更多信息,并帮助我了解如何编写代码或任何链接 关于这个?

【问题讨论】:

  • 根据您的问题,您不应尝试自己执行此操作。查找身份验证框架。
  • 我向 Eksblowfish 推荐 Authen::Passphrase

标签: perl cgi


【解决方案1】:

最初设置用户时调用make_crypto_hash,参数是他给定的密码。将函数返回值存入数据库。

sub make_crypto_hash {
    my ($passphrase) = @_;
    return Authen::Passphrase::BlowfishCrypt->new(
        cost        => 8,
        salt_random => 1,
        passphrase  => $passphrase,
    )->as_rfc2307;
}

当有人登录并且您想查看密码是否属于该用户时,请致电match_passphrase_against_crypto_hash。参数是您从数据库中为给定用户名检索的加密哈希,以及用户刚刚给出的密码。返回值是布尔值。

sub match_passphrase_against_crypto_hash {
    my ($crypto_hash, $passphrase) = @_;
    return Authen::Passphrase::BlowfishCrypt
        ->from_rfc2307($crypto_hash)->match($passphrase);
}

【讨论】:

  • 非常感谢我将在我的程序中使用它的代码,如果我在任何地方受到打击,都会回复你...再次感谢您 Mr.Daxim..
  • @jene:如果此答案对您有用,那么将其标记为已接受是一种适当的礼仪(单击此问题旁边的勾勒复选标记)。
  • stackoverflow 答案中的这种完美程度和完整性只有在 Perl 中才有可能......
【解决方案2】:

MD5 将任何字符串转换为摘要。 要检查用户的密码是否有效,您不需要数据库中的密码,只需将他们输入的摘要与您存储的摘要进行比较即可。

【讨论】:

  • MD5 是一个散列,尽管它已经过时了,所以它不会“加密”任何东西。
  • 不是加密,是散列算法。请正确使用术语,这些是密码学的不同概念。
  • @Ljubomir:如果你有一个用于未加盐哈希的彩虹表,你可以这样做,这只是我建议 jene 在重新发明八边形之前重用现有身份验证框架的另一个原因。跨度>
  • @jene:MD5 不是加密。寻找适合您平台的身份验证框架。
  • 这个答案非常糟糕。它推荐了一种过时的弱哈希算法,根本没有提到盐渍。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-10-03
  • 2012-02-03
  • 2016-06-12
  • 1970-01-01
  • 2013-06-13
  • 1970-01-01
相关资源
最近更新 更多