首页 > 解决方案 > 使用 AES_CBC_PKCS5 进行 PHP 加密

问题描述

社区。

我正在尝试访问 API 以获取某些用户的登录信息,因为我的应用程序没有本地数据库。

负责数据库的团队给了我以下信息:

他们还给了我一个示例用户名/密码及其加密对应项。

我正在这样做:

echo openssl_encrypt($string, 'aes-128-cbc', $key, 0, $iv) . '<br>';
echo openssl_encrypt($string, 'aes-192-cbc', $key, 0, $iv) . '<br>';
echo openssl_encrypt($string, 'aes-256-cbc', $key, 0, $iv) . '<br>';

我也试过0换成OPENSSL_RAW_DATAand OPENSSL_ZERO_PADDING

但是我的结果没有一个与他们的结果相匹配。

到目前为止,我还没有听说过这种加密类型。我在这里做错了什么?我需要一些指导。

在此先感谢您的时间。

标签: phpencryption

解决方案


您缺少 PKCS5 填充。这是一个示例函数及其用法:


function pkcs5pad($text, $blocksize) {
  $pad = $blocksize - (strlen($text) % $blocksize);

  return $text . str_repeat(chr($pad), $pad);
}

# Usage in your case
$padded_string = pkcs5pad($string, 16);
$encrypted_string = openssl_encrypt($padded_string, 'AES-256-CBC', $key, OPENSSL_RAW_DATA | OPENSSL_NO_PADDING, $iv);
  

推荐阅读