我有指令行
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),因为我不知道如何根据命令填充它。
答案 0 :(得分:2)
两件事...
dgst
时正在做openssl
(摘要)操作,因此您不能在php中调用openssl_encrypt
。至少有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=
希望这就是您正在寻找的人。干杯!