我正在尝试使用 Perl 验证加盐密码,但我被 unpack 卡住了。
我有一个加盐哈希密码,例如 SHA256:SSHA256 = SHA256('password' + 'salt') + 'salt' Base64 编码得到' {SSHA256}eje4XIkY6sGakInA+loqtNzj+QUo3N7sEIsj3fNge5lzYWx0'。
我将此字符串存储在我的用户数据库中。当用户登录时,需要将盐与哈希分开,以使用盐对提供的密码进行哈希处理,并将结果与从数据库中检索到的结果进行比较。这就是我卡住的地方。我似乎没有正确的解包模板将哈希(8 位二进制,固定长度,在本例中为 32 字节)与盐(8 位二进制,可变长度)分开。
我尝试过类似
my ($hash, $salt) = unpack('N32 N*', $data);
的方法,但似乎没有成功。
我的问题是:我怎样才能解压这个哈希(在它被 Base64 解码之后)以获得一个固定长度的哈希和另一个变量中的可变长度盐?