环境
- PHP7.4
- OpenSSL 3.0.0
问题
如下所示,openssl encrypto命令的结果与php openssl_encrypt函数的结果不同。为什么两个命令的结果不一样
$ php -r 'var_dump(openssl_encrypt("test@email.com", "bf-cbc","a88e2d710bee460c", 0,"11111111"));'
串(24(";4iZiBW4UYWswVd3fkS+OOA=";
$ echo "test@email.com" | openssl enc -bf-cbc -K "61383865326437313062656534363063" -iv "3131313131313131" -base64 -A -provider legacy
(如果是版本1,则无需添加提供程序旧版((输出(";4iZiBW4UYWsfLsRE7dKxZQ==";
在十六进制中;a88e2d710bee460c";等于";6138 3865 3264 3731 3062 6565 3436 3063〃;。($ printf a88e2d710bee460c | xxd
的结果(
iv";11111111";等于";3133133133131 3131";($ printf 11111111 | xxd
结果(
至于解密
$ echo "4iZiBW4UYWswVd3fkS+OOA==" | openssl enc -d -bf-cbc -K "61383865326437313062656534363063" -iv "3131313131313131" -base64 -provider legacy
(输出时不带换行符(test@email.com
$ echo "4iZiBW4UYWsfLsRE7dKxZQ==" | openssl enc -d -bf-cbc -K "61383865326437313062656534363063" -iv "3131313131313131" -base64 -provider legacy
(用换行符输出(test@email.com
我已经自行解决了这个问题。
当我们使用unix的echo命令时,除非添加选项-n,否则会出现换行符。
所以,下面两个命令是相同的结果。
CCD_ 7
string(24("4iZiBW4UYWswVd3fkS+OOA=";
$ echo -n "test@email.com" | openssl enc -bf-cbc -K "61383865326437313062656534363063" -iv "3131313131313131" -base64 -A -provider legacy
(输出(4iZiBW4UYWswVd3fkS+OOA==