0

我正在使用 dbix::class 和催化剂与我的数据库进行交互。但是,我存储的一些数据是敏感的,所以我想在它进入数据库之前加密(插入或更新)并在它出来时解密(选择)。我知道如何使用这个模块:DBIx::Class::PassphraseColumn你可以在将密码放入数据库时​​自动加密密码,方法是将它放在你的模式文件中:

__PACKAGE__->add_columns(
    '+password' => {
        passphrase       => 'rfc2307',
        passphrase_class => 'BlowfishCrypt',
        passphrase_args  => {
            cost        => 14,
            salt_random => 20,
        },
        passphrase_check_method => 'check_password',
    }
);

因此,无论何时您更新密码,您都不必担心对其进行加密,DBIx 会为您完成。是否有一种类似的方式,每当我在列中插入或更新一个值时,它会为我加密它,而每当我选择它时,它会为我解密?或者,也许有一种方法可以添加在插入或更新之前或在选择之后调用的方法,让您有机会操作数据?谢谢!

4

1 回答 1

1

看看列访问器重载。如果 @_ 不为空,您可以加密数据,并在返回值时解密。我已经修改了该页面上的示例以更好地满足您的需求:

__PACKAGE__->add_columns(description => { accessor => '_description' });

sub description {
    my $self = shift;

    # If there is an update to the column, encrypt it before calling the original accessor
    return $self->_description(encrypt($_[0])) if @_;

    # Fetch and decrypt the column value.
    return decrypt($self->_description);
}

您仍然需要指定 encrypt() 和 decrypt(),但这可以帮助您完成大部分工作。

于 2012-07-23T07:53:50.880 回答