2

是否可以在 PHP 中设置Argon2哈希长度?

github上更新的问题+答案:https ://github.com/charlesportwoodii/php-argon2-ext/issues/9

问题:2 个应用程序通信并进行加密。现在我希望这两个应用程序能够创建相同的哈希长度。

java 应用程序使用的 hash_len 为 24,而 php 应用程序的默认值为 32。

Java 应用程序超出了我的控制范围,那么如何在 php 中生成相同的哈希长度?

这些是官方的 php 选项:

内存成本

时间成本

线程

据我所知,标准的 php lib 似乎不支持其他任何东西,有什么解决方法吗?

在 Java 中,我们可以按照以下方式做一些事情:

argon2.hash_password(
"Password",
memory_cost=512,
time_cost=2,
parallelism=2,
hash_len=24
)

在 PHP 中

$options = [
"memory_cost" => 1024,
"time_cost" => 2,
"threads" => 2
];
password_hash('test', PASSWORD_ARGON2I, $options);

我能想到的解决方法 atm 可能是一个 python 包,它生成具有长度的哈希。

Python/PHP 示例:

PHP
    $command = "python /path/to/argon2i_script.py 2>&1";
    $pid = popen( $command,"r");
    while( !feof( $pid ) )
    {
     echo fread($pid, 256);
     flush();
     ob_flush();
     usleep(100000);
    }
    pclose($pid);

Python
    import argon2, binascii
    
    hash = argon2.hash_password_raw(
        time_cost=16, memory_cost=2**15, parallelism=2, hash_len=32,
        password=b'password', salt=b'some salt', type=argon2.low_level.Type.ID)
    print("Argon2 raw hash:", binascii.hexlify(hash))
    
    argon2Hasher = argon2.PasswordHasher(
        time_cost=16, memory_cost=2**15, parallelism=2, hash_len=32, salt_len=16)
    hash = argon2Hasher.hash("password")

参考: https ://framework.zend.com/blog/2017-08-17-php72-argon2-hash-password.html#:~:text=The%20hash%20size%20is%2032%20bytes.&text=The %20default%20parameters%20for%20the,2%20value%20for%20the%20memory_cost%20https://symfony.com/blog/new-in-symfony-4-3-sodium-password-encoder

4

0 回答 0