首页 > 解决方案 > 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 中注释密码行,但随后它给出了一些其他错误。

请帮忙...

标签: encryptionlaravel-5.7

解决方案


我在 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 的结果。

我希望这个信息帮助。


推荐阅读