【问题标题】:What's the size of a HMACSHA2 hash in Crypt::PBKDF2 in Perl?Perl 中 Crypt::PBKDF2 中 HMACSHA2 哈希的大小是多少?
【发布时间】:2020-09-07 09:58:31
【问题描述】:

我想将密码哈希值存储在数据库中。哈希将使用

生成
my $PBKDF2 = Crypt::PBKDF2->new(
    hash_class => 'HMACSHA2',
    hash_args => {
        sha_size => 512,
    },
    iterations => 10000,
    salt_len => 10,
);

在 Crypt::PBKDF2 的 Pod 中我发现:

输出哈希的默认大小(以字节为单位,而不是位)。如果一个值 未提供,输出大小取决于 hash_class / hasher 被选中,并且将等于后端哈希的输出大小(例如 20 HMACSHA1 的字节)。

但实际上默认输出大小是多少?

【问题讨论】:

    标签: perl crypt pbkdf2


    【解决方案1】:

    32 字节

    您可以在Crypt::PBKDF2::Hash::HMACSHA2source code 中找到此信息。定义默认大小的代码是:

    has 'sha_size' => (
      is => 'ro',
      isa => Type::Tiny->new(
        name => 'SHASize',
        parent => Enum[qw( 224 256 384 512 )],
        display_name => 'valid number of bits for SHA-2',
      ),
      default => 256,
    );
    

    用于返回大小的函数将sha_size除以8:

    sub hash_len {
      my $self = shift;
      return $self->sha_size() / 8;
    }
    

    因此默认返回 256/8 = 32。

    【讨论】:

    • 所以当我使用 512 时,对我来说是 64。我真正想要的是我在数据库中需要的大小。似乎通过添加一些 base64 开销加上模块添加的标准内容,我最终得到了存储所需的 135 字节。我有点不确定字节数是否会改变。感谢您向我指出我非常有信心的来源,大小将始终相同。
    猜你喜欢
    • 2016-11-02
    • 2019-02-05
    • 2016-01-13
    • 2011-09-30
    • 1970-01-01
    • 2012-07-09
    • 2018-02-06
    • 2017-04-09
    • 2017-07-22
    相关资源
    最近更新 更多