encryption - Laravel 5.7:openssl_cipher_iv_length():未知密码算法
问题描述
我正在 Laravel Framework 5.7.13 中开发一个应用程序。
我有一堂课叫
<?php
namespace App\Library;
class Crypto{
private $cipher;
private $cstrong;
private $keylen;
private $key;
public function __Crypto(){
$this->cipher= Config::get('cipher');
$this->cstrong = true;
$this->keylen = 5;
$this->key = bin2hex(openssl_random_pseudo_bytes($keylen, $cstrong));
}
public function opensslEncrypt($value){
$ivlen = openssl_cipher_iv_length($this->cipher);
$iv = openssl_random_pseudo_bytes($ivlen);
$ciphertext_raw = openssl_encrypt($value, $this->cipher, $this->key, $options=OPENSSL_RAW_DATA, $iv);
$hmac = hash_hmac('sha256', $ciphertext_raw, $this->key, $as_binary=true);
$ciphertext = base64_encode( $iv.$hmac.$ciphertext_raw );
return $ciphertext ;
}
}
现在在我的控制器中我做了:
$crypto = new Crypto();
$encryptedValue = $crypto->opensslEncrypt($orderId);
在我的 Config\app.php
'cipher' => 'AES-256-CBC'
但是当我运行我的应用程序时,我得到了
ErrorException (E_WARNING) openssl_cipher_iv_length(): 未知密码算法
如何解决这个问题?
我试图在 Config\app.php 中注释密码行,但随后它给出了一些其他错误。
请帮忙...
解决方案
我在 Laravel 5.7.13 中遇到了类似的问题。
当我将 WampServer 安装更新到 PHP v7.2.x(从 v7.1.10 开始)时,遇到了 Laravel 和 openssl_cipher_iv_length() 函数的错误。是的,我在 Windows 上运行。
切换回 php v7.1.10 将清除错误。
为了解决我的 openssl_cipher_iv_length() 错误,我比较了两个 php 版本的 php.ini 文件。在比较文件时,我注意到我没有正确设置 extension_dir。这是我的主要问题,但我在过去所做的其他编辑也合并到了新的 PHP 环境中(即启用的扩展和 XDEBUG 设置)。
另外...我确实注意到扩展名之前定义为: extension=php_<ext>.dll
或者
扩展=<ext>.so
现在正在使用:
分机=<分机>
所以我对 openssl_cipher_iv_length() 的问题是 PHP 版本而不是 Laravel 的结果。
我希望这个信息帮助。
推荐阅读
- ios - 如何使用 MVVM + Swift4 实现注册屏幕
- ios - expo弹出后无法运行IOS,只看到白屏,如何使其工作?
- ios - objc-runtime search_method_list 永远挂起,死锁?
- ios - iOS 自定义键盘增加 UIInputViewController 高度
- sql-server - 如何将 1:1 关系转换为 1:N 关系
- php - 如何获取特定父级(父级 ID)的子级并在族谱树中显示输出
- openmdao - 如何将离散时间估计集成到 OpenMDAO 组件中?
- vim - 如何编写 vim 函数将模板文本粘贴到当前文件中?
- c# - 在中间件中获取控制器的类型信息(或如何区分对 Web api 和页面的请求)
- botframework - LUIS / 任何其他 MS 服务中是否有识别相关子句的最佳实践?