php - 使用 AES_CBC_PKCS5 进行 PHP 加密
问题描述
社区。
我正在尝试访问 API 以获取某些用户的登录信息,因为我的应用程序没有本地数据库。
负责数据库的团队给了我以下信息:
- 加密类型:AES_CBC_PKCS5;
- 密钥:[他们的密钥];
- 四:[他们的_iv];
- 和一个 GET 端点。
他们还给了我一个示例用户名/密码及其加密对应项。
我正在这样做:
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_DATA
and OPENSSL_ZERO_PADDING
。
但是我的结果没有一个与他们的结果相匹配。
到目前为止,我还没有听说过这种加密类型。我在这里做错了什么?我需要一些指导。
在此先感谢您的时间。
解决方案
您缺少 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);
推荐阅读
- html - 字体真棒图标没有显示,不知道为什么
- windows - PE文件中的DOS存根
- swift - 使用 SwiftUI 创建一个嵌套列表以及 Core Data 应用程序
- node.js - 如何在 mongoose 中获取一份文档?(不要使用聚合)
- java - 为什么命令 /usr/libexec/java_home 不起作用?
- php - 使用 PHP 和 google/cloud-dialogflow 库处理履行的最佳实践是什么
- c# - Azure AD 和 Aspnet Core Identity 如何协同工作?
- sql - 给定日期时间 + 1 小时的值计数
- laravel - 在模型事件闭包中调用 Trait 方法
- python - 我想这样写我的产品名称 - my_productnam....更多... | 在 django