2010-09-09 109 views
1

我是Perl CGI的新手,使用ActivePerl,SQLite DB,Apache服务器和Windows。 我有一个参赛表格,其中他们是像Id,名称,密码等 上。每当有人进行新的输入时,无论他们输入什么密码 字段应该加密并存储在数据库中。如何在Perl CGI程序中加密和解密密码?

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

我发现了一种叫做MD5加密的东西。请有人可以给我 我更多关于这方面的信息,并帮助我如何写代码或关于此的任何链接 ?

+5

根据你的问题,你不应该尝试自己做这件事。找到一个认证框架。 – 2010-09-09 11:15:05

+0

我推荐使用Eksblowfish ['Authen :: Passphrase'](http://p3rl.org/Authen::Passphrase)。 – daxim 2010-09-09 11:35:50

回答

9

拨打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); 
} 
+0

非常感谢代码我gona在我的程序中使用这个代码,如果我在任何地方遇到任何问题,请回复您...谢谢您再次Mr.Daxim .. – sonya 2010-09-09 12:26:10

+0

@jene:如果此答案适用于您,礼仪将其标记为已接受(点击此问题旁边的复选标记)。 – Ether 2010-09-14 16:06:28

0

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

+5

MD5是一个散列,尽管它已经过时了,所以它不会“加密”任何东西。 – 2010-09-09 11:13:42

+0

顺便说一句MD5加密是不可逆的,那就是你不能恢复原来的密码。 – 2010-09-09 11:14:46

+2

这不是加密,它是一种哈希算法。请正确使用术语,这些是密码术的不同概念。 – daxim 2010-09-09 11:32:33