【问题标题】:AES (block size 128-bit) in CBC mode with PKCS#5 padding in PHP 8CBC 模式下的 AES(块大小 128 位),在 PHP 8 中使用 PKCS#5 填充
【发布时间】:2021-11-06 08:50:33
【问题描述】:

尝试将加密数据从 laravel php8 应用程序发送到 sage pay 或 opayo。

我无法弄清楚如何在 PHP8 中使用 PKCS#5 填充在 CBC 模式下执行 AES(块大小 128 位)。

Openssl 似乎只允许我们填充 PKCS#7 和旧的 PHP 示例和方法都依赖于已弃用/删除的函数。

 $cryptFieldString = http_build_query($cryptFields);
 $encodedCrypt = openssl_encrypt($cryptFieldString, 'aes-128-cbc', $key, 0, $key);
 $crypt = '@'.strtoupper(bin2hex($encodedCrypt));

$encodedCrypt 变量将始终返回 PKCS#7 或原始数据。

提前致谢

【问题讨论】:

  • 在 AES 的上下文中,PKCS#5 填充是什么意思?也许你混淆了 PKCS#5 和 PKCS#7 填充,请参阅here

标签: php encryption opayo php-8 pkcs#5


【解决方案1】:

PKCS#5 填充只是结合 bin2hex 和 openssl_encrypt 添加的,您不需要使用任何其他函数。但是,您必须检查支持的编码是这样的

if( in_array( 'AES-128-CBC', openssl_get_cipher_methods() ) ) {
            $cipher_method = 'AES-128-CBC';
        }

        if( in_array( 'aes-128-cbc', openssl_get_cipher_methods() ) ) {
            $cipher_method = 'aes-128-cbc';
        }

所以你可以使用bin2hex( openssl_encrypt( $input, $cipher_method, $securekey, OPENSSL_RAW_DATA, $securekey ) )

【讨论】:

  • 你能edit你的答案解释他使用的方法有什么不同,以及如何使用它吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-01-31
  • 2013-06-09
  • 1970-01-01
  • 2023-03-17
  • 1970-01-01
  • 2017-03-27
  • 1970-01-01
相关资源
最近更新 更多