Php 如何在openssl_random_pseudo_字节(0)中固定长度必须大于0?

Php 如何在openssl_random_pseudo_字节(0)中固定长度必须大于0?,php,encryption,aes,Php,Encryption,Aes,我试图创建一个qr码生成器,但使用aes加密时遇到了错误 致命错误:未捕获错误:长度必须大于0英寸。。堆栈跟踪:#0..:openssl#u随机#u伪#u字节(0)#1..:AES->getIV()#2..:AES->encrypt()#3{main}抛出。。在线146 它指向这一行返回openssl_random_pseudo_字节(openssl_cipher_iv_length($this->method)) 我如何解决我修复这个问题,这意味着我需要修复长度必须大于0的问题 link :

我试图创建一个qr码生成器,但使用aes加密时遇到了错误

致命错误:未捕获错误:长度必须大于0英寸。。堆栈跟踪:#0..:openssl#u随机#u伪#u字节(0)#1..:AES->getIV()#2..:AES->encrypt()#3{main}抛出。。在线146

它指向这一行
返回openssl_random_pseudo_字节(openssl_cipher_iv_length($this->method))

我如何解决我修复这个问题,这意味着我需要修复长度必须大于0的问题

link : <input type="text" name="link"  value="<?=$link?>" > <br>
info : <input type="text" name="minfo"  value="<?=$minfo?>" > <br>
mode : <input type="text" name="mode"  value="<?=$mode?>" > <br>
key : <input type="text" name="key" value="<?=$key?>" >  <br>
blockSize : <input type="text" name="blockSize" value="<?=$blockSize?>" ><br> 
<input type="submit" name="btn" value="encrypt" >
<?php
ini_set('display_errors', 1);
ini_set('display_startup_errors', 1);
error_reporting(E_ALL);

$info = (explode(";",$minfo));
$abc_code = $info[0];
$abc_title = $info[1];

$inputText = trim($minfo);
$secret_key = $key; 
$blockSize = trim($blockSize);//128;
$mode = trim($mode);

$aes = new AES($inputText, $secret_key, $blockSize, $mode );
$enc = $aes->encrypt();

$StrQRCode = $link.$enc; 
echo "<br>ecrypted : ".$enc." <br/>";
echo "<br>text : ".$link.$enc." <br/>";
$aes->setData($enc);
$dec=$aes->decrypt();
echo "decrypted: ".$dec." <br/>";

?>

<?php


/**
Aes encryption
*/
class AES {
   
    protected $key;
    protected $data;
    protected $method;
    /**
     * Available OPENSSL_RAW_DATA | OPENSSL_ZERO_PADDING
     *
     * @var type $options
     */
    protected $options = 0;
    /**
     * 
     * @param type $data
     * @param type $key
     * @param type $blockSize
     * @param type $mode
     */
    function __construct($data, $key , $blockSize , $mode ) {
        $this->setData($data);
        $this->setKey($key);
        $this->setMethode($blockSize, $mode);
    }
    /**
     * 
     * @param type $data
     */
    public function setData($data) {
        $this->data = $data;
    }
    /**
     * 
     * @param type $key
     */
    public function setKey($key) {
        $this->key = $key;
    }
    public function setMethode($blockSize, $mode ) { //$mode = 'CBC'
        if($blockSize==192 && in_array('', array('CBC-HMAC-SHA1','CBC-HMAC-SHA256','XTS'))){
            $this->method=null;
             throw new Exception('Invlid block size and mode combination!');
        }
        $this->method = 'AES-' . $blockSize . '-' . $mode;
    }
    /**
     * 
     * @return boolean
     */
    public function validateParams() {
        if ($this->data != null &&
                $this->method != null ) {
            return true;
        } else {
            return FALSE;
        }
    }
     protected function getIV() {
         return openssl_random_pseudo_bytes(openssl_cipher_iv_length($this->method));
     }
    public function encrypt() {
        if ($this->validateParams()) { 
            return trim(openssl_encrypt($this->data, $this->method, $this->key, $this->options,$this->getIV()));
        } else {
            throw new Exception('Invlid params!');
        }
    }
    /**
     * 
     * @return type
     * @throws Exception
     */
    public function decrypt() {
        if ($this->validateParams()) {
           $ret=openssl_decrypt($this->data, $this->method, $this->key, $this->options,$this->getIV());
          
           return   trim($ret); 
        } else {
            throw new Exception('Invlid params!');
        }
    }
}


?>


link:在您执行“$mode=trim($mode);”之后的值是多少?->请打印出该值。我认为该值为0,因此最后您尝试生成一个长度为0的随机值。$mode的值为
ECB
两条注释:请不要再使用不安全的ECB模式;其次:不要使用ECB模式,因为它没有初始化向量。将模式更改为(例如,'CBC'允许您运行您的类:-)哦,天哪,这就是我出现错误的原因吗???这么想你,我真的不知道那件事。我想我需要阅读更多在你做“$mode=trim($mode);”->之后的值是多少请打印出值。我认为该值为0,因此最后您尝试生成一个长度为0的随机值。$mode的值为
ECB
两条注释:请不要再使用不安全的ECB模式;其次:不要使用ECB模式,因为它没有初始化向量。将模式更改为(例如,'CBC'允许您运行您的类:-)哦,天哪,这就是我出现错误的原因吗???这么想你,我真的不知道那件事。我想我需要多读点书