Tip*_*puR 1 php command-line openssl
我正在尝试使用 PHP 和 openssl 命令行加密数据,预期加密数据相同,但我得到不同的数据。
在 linux 上,这是我的 openssl -version
OpenSSL> version
OpenSSL 1.0.2k-fips 26 Jan 2017
Run Code Online (Sandbox Code Playgroud)
我试图传递 48 字节的数据,希望可以避免填充。但没有运气。我观察到 IV 是不同的,所以也尝试在 PHP 代码中使用 IV = 905E17D5F5E4939D0000000000000000。但是我收到警告 openssl_encrypt(): IV 传递的是 32 字节长,比所选密码预期的 16 字节长,截断
在命令行上尝试使用/不使用 -nosalt 选项。
<?php
// encrypt/decrypt string
$output = false;
$encrypt_method = "AES-256-CBC";
$key = '905e17d5f5e4939d48bd04ff47f9de906375b87b67068b2ce5d1bbbbc8dca291';
$iv = '905e17d5f5e4939d';
$string = "123456789ABCDEFG123456789ABCDEFG123456789ABCDEFG";
$output = openssl_encrypt($string, $encrypt_method, $key, 0, $iv);
echo $output;
?>
nEUDtXM7OQt32YEx778BgqZfocXrNNA9AihkioWZo9ri9p11DtxUpTFO30AHUk41F9PUBLu6YlYu/mdLcOZ3Cg==
Run Code Online (Sandbox Code Playgroud)
linux命令行中的openssl:
echo "123456789ABCDEFG123456789ABCDEFG123456789ABCDEFG" |openssl enc -base64 -e -aes-256-cbc -K 905e17d5f5e4939d48bd04ff47f9de906375b87b67068b2ce5d1bbbbc8dca291 -iv 905e17d5f5e4939d -nosalt -p
key=905E17D5F5E4939D48BD04FF47F9DE906375B87B67068B2CE5D1BBBBC8DCA291
iv =905E17D5F5E4939D0000000000000000
c4JHI/8SIQkx7GXM2SclOXhbmR9vYBFLHt/jY0x7pJou9J2INJBQMISRYH4CPjvy
QDeyOWpcEEN/N6FnSdF0EA==
Run Code Online (Sandbox Code Playgroud)
我在这里错过了什么?如何确保 PHP 和 openssl 命令行都使用相同的 IV/Key?如果有的话,如何确保两者的填充相同?我希望双方看到相同的结果。
小智 5
这对我有用
<?php
// encrypt/decrypt string
$output = false;
$encrypt_method = "AES-256-CBC";
$key = hex2bin('905E17D5F5E4939D48BD04FF47F9DE906375B87B67068B2CE5D1BBBBC8DCA291');
$iv = hex2bin('905E17D5F5E4939D0000000000000000');
$string = "123456789ABCDEFG123456789ABCDEFG123456789ABCDEFG";
$output = openssl_encrypt($string, $encrypt_method, $key, 0, $iv);
echo $output;
?>
Run Code Online (Sandbox Code Playgroud)
并在 CLI 中
echo -n "123456789ABCDEFG123456789ABCDEFG123456789ABCDEFG" |openssl aes-256-cbc -a -K 905e17d5f5e4939d48bd04ff47f9de906375b87b67068b2ce5d1bbbbc8dca291 -iv 905E17D5F5E4939D0000000000000000 -nosalt
Run Code Online (Sandbox Code Playgroud)
不同之处在于
echo -n "foo"而不是echo "foo"
(否则你在 PHP 代码中加密不同的字符串十)。hex2bin()。| 归档时间: |
|
| 查看次数: |
163 次 |
| 最近记录: |