Конвертировать алгоритм шифрования mcrypt в openssl - PullRequest
0 голосов
/ 31 мая 2018

Поскольку php прекратил поддержку Mcrypt с 7.2 и далее.Я не знаю достаточно, чтобы конвертировать Mcrypt в Openssl.Мне было интересно, может ли кто-нибудь предоставить для этого эквивалент OpenSSL?Для записи, я не ищу поддержки Mcrypt, поэтому мне нужно расшифровать мои зашифрованные строки mcrypt (пароли) через openSSL.

Для кодирования через mcrypt ->

static function encode($value= NULL, $key= NULL){
    if(!$value){
        return false;
    }
    $text = $value;
    $iv_size = mcrypt_get_iv_size(MCRYPT_RIJNDAEL_256, MCRYPT_MODE_ECB);
    $iv = mcrypt_create_iv($iv_size, MCRYPT_RAND);
    $crypttext = mcrypt_encrypt(MCRYPT_RIJNDAEL_256, $key, $text, MCRYPT_MODE_ECB, $iv);
    return trim(self::safe_b64encode($crypttext));
}
private function safe_b64encode($string= NULL) {
    $data = base64_encode($string);
    $data = str_replace(array('+','/','='),array('-','_',''),$data);
    return $data;
}

Ответы [ 2 ]

0 голосов
/ 31 мая 2018

Обновлено

К сожалению, похоже, что вы не сможете сделать то, что вы хотите.Если бы вы использовали режим MCRYPT_RIJNDAEL_128 с 256-байтовым ключом, возможно, была надежда.

Шифрование AES-256 и MCRYPT_RIJNDAEL_256 - это не одно и то же, хотя AES - это в основном Rijndael.Все это связано с размером блока.То, что вы хотите сделать, просто несовместимо.

Ваши варианты таковы:

  • Используйте версию PHP, в которой все еще доступны библиотеки MCRYPT, и расшифруйте пароли к файлу изатем зашифруйте их новым методом шифрования.
  • Появляется опция PECL, которая позволит вам установить псевдо-версию MCRYPT с вашей последней версией PHP.

Для простого шифрованияи расшифровка ваших паролей OpenSSL должен быть в порядке, но OpenSSL имеет ограничения, особенно если вы хотите зашифровать большие объемы данных.Это требует от вас написания дополнительного кода, чтобы разбить ваши данные на более мелкие куски перед шифрованием, а затем собрать их обратно после расшифровки.

Я настоятельно рекомендую вам пропустить OpenSSL и изучить библиотеку LibSodium, которая теперь поддерживаетсяна последних версиях PHP.

http://php.net/manual/en/book.sodium.php

Вот хорошая страница для чтения, чтобы вы начали.

https://paragonie.com/blog/2015/05/using-encryption-and-authentication-correctly

Еще несколько ресурсов Libsodium.

https://github.com/paragonie/pecl-libsodium-doc/blob/v1/chapters/01-quick-start.md

Удачи ~

0 голосов
/ 31 мая 2018

У вас есть так много вариантов, когда дело доходит до шифрования данных, поэтому вы должны реализовать это самостоятельно.Я рекомендую вам библиотеку diffuse / php-encryption, см. эту ссылку для подробного руководства.

...