Перейти до вмісту
Пошук в
  • Детальніше...
Шукати результати, які ...
Шукати результати в ...

PHP Unknown: Function mcrypt_create_iv() is deprecated


LuckyPerson

Recommended Posts

ocStore 1.5.5.1.2

Хостер изменил php версию (7.1). Соответственно сразу возникли проблемы. С белым экраном справился. Изменил драйвер БД на mysqli, все заработало.

Но появилась ошибка: PHP Unknown: Function mcrypt_create_iv() is deprecated in .../system/library/encryption.php on line 8

Начитавшись, понял, что функция mcrypt_create_iv в php 7.1 устарела.

 

Вот оригинальный файл:

Spoiler

<?php
final class Encryption {
	private $key;
	private $iv;
	
	public function __construct($key) {
        $this->key = hash('sha256', $key, true);
		$this->iv = mcrypt_create_iv(32, MCRYPT_RAND);
	}
	
	public function encrypt($value) {
		return strtr(base64_encode(mcrypt_encrypt(MCRYPT_RIJNDAEL_256, $this->key, $value, MCRYPT_MODE_ECB, $this->iv)), '+/=', '-_,');
	}
	
	public function decrypt($value) {
		return trim(mcrypt_decrypt(MCRYPT_RIJNDAEL_256, $this->key, base64_decode(strtr($value, '-_,', '+/=')), MCRYPT_MODE_ECB, $this->iv));
	}
}
?>

 

 

Вопрос к спецам.

Можно ли вот так его изменить? Точнее правильно ли это? Залил на хостинг, ошибка пропала.

Spoiler

<?php
final class Encryption {
	private $key;
	
	public function __construct($key) {
        $this->key = hash('sha256', $key, true);
	}
	
	public function encrypt($value) {
		return base64_encode(openssl_encrypt($value, 'AES-256-CBC', hash('sha256', $this->key, true), 0, substr(hash('sha256', $this->key, true), 16, 16)));
	}
	
	public function decrypt($value) {
		return openssl_decrypt(base64_decode($value), 'AES-256-CBC', hash('sha256', $this->key, true), 0, substr(hash('sha256', $this->key, true), 16, 16));
	}
}
?>

 

 

Спасибо.

Змінено користувачем LuckyPerson
Надіслати
Поділитися на інших сайтах


2 часа назад, LuckyPerson сказал:

ocStore 1.5.5.1.2

Хостер изменил php версию (7.1). Соответственно сразу возникли проблемы. С белым экраном справился. Изменил драйвер БД на mysqli, все заработало.

Но появилась ошибка: PHP Unknown: Function mcrypt_create_iv() is deprecated in .../system/library/encryption.php on line 8

Начитавшись, понял, что функция mcrypt_create_iv в php 7.1 устарела.

 

Вот оригинальный файл:

  Показать контент


<?php
final class Encryption {
	private $key;
	private $iv;
	
	public function __construct($key) {
        $this->key = hash('sha256', $key, true);
		$this->iv = mcrypt_create_iv(32, MCRYPT_RAND);
	}
	
	public function encrypt($value) {
		return strtr(base64_encode(mcrypt_encrypt(MCRYPT_RIJNDAEL_256, $this->key, $value, MCRYPT_MODE_ECB, $this->iv)), '+/=', '-_,');
	}
	
	public function decrypt($value) {
		return trim(mcrypt_decrypt(MCRYPT_RIJNDAEL_256, $this->key, base64_decode(strtr($value, '-_,', '+/=')), MCRYPT_MODE_ECB, $this->iv));
	}
}
?>

 

 

Вопрос к спецам.

Можно ли вот так его изменить? Точнее правильно ли это? Залил на хостинг, ошибка пропала.

  Показать контент


<?php
final class Encryption {
	private $key;
	
	public function __construct($key) {
        $this->key = hash('sha256', $key, true);
	}
	
	public function encrypt($value) {
		return base64_encode(openssl_encrypt($value, 'AES-256-CBC', hash('sha256', $this->key, true), 0, substr(hash('sha256', $this->key, true), 16, 16)));
	}
	
	public function decrypt($value) {
		return openssl_decrypt(base64_decode($value), 'AES-256-CBC', hash('sha256', $this->key, true), 0, substr(hash('sha256', $this->key, true), 16, 16));
	}
}
?>

 

 

Спасибо.


Скажите, пожалуйста, вот у вас есть зарядка для телефона нокиа, вы же ей не пытаетесь зарядить микро USB. То и то зарядки, только разных поколений.
Заряжают по времени одинаково, только разьемы разные.

Также с php. 7.x от 5.4+ отличается более продвинутыми объектно-ориенитроваными инструментами. Такие как трейты, замыкания etc.

 

Opencart 1.5.5 требует в окружении php 5.3. Зачем создавать себе лишние проблемы?

Почему вы не пытаетесь микроUSB всунуть  в старую нокию, но пытаетесь запустить старую версию опенкарта в новом окружении?

Надіслати
Поділитися на інших сайтах

научитесь пользоваться документацией http://php.net/manual/ru/function.mcrypt-create-iv.php 

Надіслати
Поділитися на інших сайтах

Цитата

Почему вы не пытаетесь микроUSB всунуть  в старую нокию, но пытаетесь запустить старую версию опенкарта в новом окружении?

Может, потому, что когда это удается, Нокиа заряжается быстрее? А еще - бывает, что другой зарядки просто нет

Надіслати
Поділитися на інших сайтах


9 минут назад, Shureg сказал:

Может, потому, что когда это удается, Нокиа заряжается быстрее? А еще - бывает, что другой зарядки просто нет

Ну мы  ж не в пустыне. Хостеров на выбор вагон.
А вся эта погоня за "новое" - это как айфонопопоболь.

Надіслати
Поділитися на інших сайтах

31 minutes ago, snastik said:

Зачем создавать себе лишние проблемы?

Я создаю себе временные решения проблемы, возникшей сейчас!!!

 

32 minutes ago, snastik said:

но пытаетесь запустить старую версию опенкарта в новом окружении?

потому что у меня сейчас старая нокиа и microЮСБ.

 

33 minutes ago, snastik said:

etc

андестенд?

Надіслати
Поділитися на інших сайтах


31 минуту назад, LuckyPerson сказал:

Я создаю себе временные решения проблемы, возникшей сейчас!!!

 

потому что у меня сейчас старая нокиа и microЮСБ.

 

андестенд?


ваша проблема решается просто  "дорогой хостер верни мне php 5.3 или 5.4" и не жуй мне мозг!

Надіслати
Поділитися на інших сайтах

  • 1 year later...

Заменяем устаревшую функцию на новый аналог. В файле system/library/encryption.php

Вместо - $this->iv = mcrypt_create_iv(32, MCRYPT_RAND);

Ставим - $this->iv = random_bytes(32);

<?php
final class Encryption {
	private $key;
	private $iv;
	
	public function __construct($key) {
		$this->key = hash('sha256', $key, true);
		$this->iv = random_bytes(32);
		//$this->iv = mcrypt_create_iv(32, MCRYPT_RAND);
	}
	
	public function encrypt($value) {
		return strtr(base64_encode(mcrypt_encrypt(MCRYPT_RIJNDAEL_256, $this->key, $value, MCRYPT_MODE_ECB, $this->iv)), '+/=', '-_,');
	}
	
	public function decrypt($value) {
		return trim(mcrypt_decrypt(MCRYPT_RIJNDAEL_256, $this->key, base64_decode(strtr($value, '-_,', '+/=')), MCRYPT_MODE_ECB, $this->iv));
	}
}
?>

 

Надіслати
Поділитися на інших сайтах


  • 10 months later...

Створіть аккаунт або увійдіть для коментування

Ви повинні бути користувачем, щоб залишити коментар

Створити обліковий запис

Зареєструйтеся для отримання облікового запису. Це просто!

Зареєструвати аккаунт

Вхід

Уже зареєстровані? Увійдіть тут.

Вхід зараз
  • Зараз на сторінці   0 користувачів

    • Ні користувачів, які переглядиють цю сторінку
×
×
  • Створити...

Important Information

На нашому сайті використовуються файли cookie і відбувається обробка деяких персональних даних користувачів, щоб поліпшити користувальницький інтерфейс. Щоб дізнатися для чого і які персональні дані ми обробляємо перейдіть за посиланням . Якщо Ви натиснете «Я даю згоду», це означає, що Ви розумієте і приймаєте всі умови, зазначені в цьому Повідомленні про конфіденційність.