使用KeePass和Perl保护您的密码

如今,密码管理器是网络安全中不可或缺的一部分。[链接](http://arstechnica.com/information-technology/2013/06/the-secret-to-online-safety-lies-random-characters-and-a-password-manager/)。File::KeePass模块提供了一个易于使用的Perl API,用于KeePass密码管理器,并为我们提供了程序化创建、读取和更新密码的安全性的可能性。

要求

您需要安装File::KeePass。CPAN测试器的结果显示,它在所有现代Perl和许多平台(包括Windows)上运行。要使用CPAN安装该模块,请在终端中启动并输入

$ cpan File::KeePass

您可能想安装KeePassX,这是KeePass的开源实现,以获取GUI。我在Windows和Linux上使用过它,效果很好。

创建KeePass数据库

KeePass密码管理器将所有密码存储在加密的数据库文件中。所有用户名/密码条目都存储在称为“组”的条目集合中。File::KeePass提供了创建所有这些项目的功能

use File::KeePass;

my $kp_db = File::KeePass->new;

my $app_group = $kp_db->add_group({ title => 'Apps' });

$kp_db->add_entry({ title     => 'email',
                    username  => 'system',
                    password  => 'mumstheword',
                    group     => $app_group->{gid},
                  });

$kp_db->save_db('MyAppDetails.kdb', 'itsasecret');

在上面的代码中,我们首先创建一个新的File::KeePass对象。使用“add_group”方法将一个名为“Apps”的新组添加到对象中。然后,我们将一个条目添加到“Apps”组中。该条目包含我们想要安全存储的用户名/密码凭据。最后,使用“save_db”方法将KeePass数据库保存到“MyAppDetails.kdb”(扩展名很重要),使用主密码“itsasecret” - 实际上您可能希望使用比这更强的密码。

将代码保存为“create_keepass_db.pl”,然后在命令行中使用此命令运行它

$ perl create_keepass_db.pl

如果您安装了KeePassX或KeePass,您可以打开新创建的“MyAppDetails.kdb”文件。当您这样做时,您将被要求输入我们设置的主密码:

keepassx login

输入主密码后,KeePassX将显示主窗口,其中列出了数据库文件中的组和条目。您可以在左侧看到“Apps”组以及创建的主窗口中的“email”条目。

keepassx main screen

读取KeePass数据库

您可以使用File::KeePass而不是使用KeePass或KeePassX等GUI读取数据库文件的内容

use File::KeePass;

my $kp_db = File::KeePass->new;
$kp_db->load_db('MyAppDetails.kdb', 'itsasecret');
my $groups = $kp_db->groups;

在这里,我们使用“load_db”方法打开我们新创建的KeePass数据库文件。使用“groups”方法返回一个组数组引用。每个组都是一个包含一个条目数组引用的哈希引用。通过使用Data::Dumper打印$groups,我们可以更清楚地看到这一点:

$VAR1 = [
          {
            'icon' => 0,
            'created' => '2014-03-24 08:28:44',
            'level' => 0,
            'entries' => [
                           {
                             'icon' => 0,
                             'modified' => '2014-03-24 08:28:44',
                             'username' => 'system',
                             'created' => '2014-03-24 08:28:44',
                             'comment' => '',
                             'url' => '',
                             'id' => 'E31rvRS5mqK37mak',
                             'title' => 'email',
                             'accessed' => '2014-03-24 08:28:44',
                             'expires' => '2999-12-31 23:23:59'
                           }
                         ],
            'title' => 'Apps',
            'id' => 2450784255,
            'accessed' => '2014-03-24 08:28:44',
            'expires' => '2999-12-31 23:23:59',
            'modified' => '2014-03-24 08:28:44'
          }
        ];

搜索和更新KeePass数据库

File::KeePass提供了搜索条目的方法。为了更新一个条目,我们必须检索它,更新它,然后保存数据库文件。由于条目只是哈希引用,所以这很容易

use File::KeePass;

my $kp_db = File::KeePass->new;
$kp_db->load_db('MyAppDetails.kdb', 'itsasecret');
$kp_db->unlock; # enable changes

my $entry = $kp_db->find_entry({ title => 'email' }); 
$entry->{password} = 'mumsnottheword';

$kp_db->save_db('MyAppDetails.kdb', 'itsasecret');

在上面的代码中,我们打开数据库文件,并使用“find_entry”方法搜索我们的email条目。然后我们更新条目的密码,并重新保存数据库文件。File::KeePass提供了许多其他搜索和更新组和条目的方法。

结论

File::KeePass有一个简单的工作API,效果很好,并带有全面的文档。我建议使用“.kdb”格式,因为File::KeePass对于“.kdbx”格式有开放问题

喜欢这篇文章吗?请帮助我们,转发它!

封面图 © DanielSTL


本文最初发布在 PerlTricks.com

标签

David Farrell

David是一位职业程序员,他经常推特博客关于代码和编程艺术。

浏览他们的文章

反馈

这篇文章有什么问题吗?请在GitHub上打开一个问题或拉取请求来帮助我们。