将openssl命令转换为php

时间:2019-06-04 02:22:56

标签: php openssl

我有指令行

echo -n 2bRePass1234 | openssl dgst -sha1 -binary | openssl enc -base64

输出:3O3bhZbGKheK + g / M4pp18AwGqq8 =(28个字符)

我需要将其转换为php

我尝试过的。 openssl_encrypt需要$ iv和$ key。我只是使用random_bytes,因为不知道什么是默认值,如上面的命令

return base64_encode(
           openssl_encrypt(
                sha1('testPass1234'),
                'AES-128-CBC',
                random_bytes(16),
                OPENSSL_RAW_DATA,
                random_bytes(16)
            )
);

但是它不会返回与命令相同的结果..有什么办法可以使用默认密钥和密码来生成它吗?

注意:我放了random_bytes(16),因为我不知道如何根据命令填充它。

1 个答案:

答案 0 :(得分:2)

两件事...

  1. 您在第一次调用dgst时正在做openssl(摘要)操作,因此您不能在php中调用openssl_encrypt
  2. 通过摘要,您不需要随机字节。

至少有2种方法可以在php中实现

1)使用sha1函数

php -r "var_dump(base64_encode(pack('H*', sha1('testPass1234'))));"
string(28) "wW+fqYWyUoXq+c76j0j2mnD5Oyc="

2)使用openssl_digest函数

php -r "var_dump(base64_encode(pack('H*', openssl_digest('testPass1234', 'SHA1'))));"
string(28) "wW+fqYWyUoXq+c76j0j2mnD5Oyc="

它们都将返回相同的值。从sha1返回的字符串将被打包成一个实数字符串,而不被视为字符串。

PS:我看到您在命令行示例和php示例中传递了不同的字符串,但是每当传递相同的字符串时,结果将相同。

echo -n testPass1234 | openssl dgst -sha1 -binary | openssl enc -base64
wW+fqYWyUoXq+c76j0j2mnD5Oyc=

希望这就是您正在寻找的人。干杯!