Что такое код mcrypt_get_cipher_name


Содержание

mcrypt_get_cipher_name

(PHP 4, PHP 5, PHP 7 = 1.0.0)

mcrypt_get_cipher_name — Gets the name of the specified cipher

Эта функция объявлена УСТАРЕВШЕЙ начиная с PHP 7.1.0. Использовать эту функции крайне не рекомендуется.

Описание

Функция mcrypt_get_cipher_name() использует для получения имени указанного шифра.

mcrypt_get_cipher_name() берет номер шифра в качестве аргумента (libmcrypt 2.2.x) или имя шифра (libmcrypt 2.4.x или выше) и возвращает имя шифра или FALSE , если шифр отсутствует.

Список параметров

Одна из констант MCRYPT_ciphername или название алгоритма в виде строки.

Возвращаемые значения

Эта функция возвращает имя шифра или FALSE , если такого шифра нет.

Примеры

Пример #1 Пример использования mcrypt_get_cipher_name()

echo mcrypt_get_cipher_name ( $cipher );
?>

Выбор шифрования шифрования для mcrypt

У меня есть несколько вопросов об этом коде:

Он шифрует файл просто отлично, однако он добавляет дополнительные значения в конце, поэтому, если я шифрую:

после дешифрования становится:

Во-вторых, MCRYPT_RIJNDAEL_256 совместим с AES-128 ?

Наконец, как я могу позволить другой стороне расшифровать файл, который я зашифровал? Им нужно было знать, какое шифрование было использовано, и я не уверен, что им сказать.

MCRYPT_RIJNDAEL_128 — AES-128, MCRYPT_RIJNDAEL_256 — AES-256 — просто другое имя:

[. ] Стандарт состоит из трех блоков шифров, AES-128, AES-192 и AES-256, принята из более крупной коллекции первоначально опубликованный как Rijndael.originally опубликованный как Rijndael. [. ]

[. ] Шифр ​​Rijndael был разработан два бельгийских криптографа, Джоан Daemen и Vincent Rijmen, и представленный ими на выбор AES обработать. Rijndael (произносится как «Рейн» dall «) — это игровой процесс с именами двух изобретателей. [. ]

Символами \x00 , с которыми вы сталкиваетесь в конце расшифрованной строки, являются padding, необходимые для некоторых блочные шифры (при этом ECB является таким блочным шифрованием). Mcyrpt использует NULL -партинг внутри, если входные данные должны быть заполнены до требуемой длины блока. Доступны другие режимы заполнения (которые должны быть кодированы пользователем при использовании Mcyrpt ), а именно PKCS7, ANSI X.923 или ISO 10126. NULL -память проблематично при шифровании двоичных данных, которые могут заканчиваться одним или несколькими \x00 , потому что вы не можете определить, где заканчиваются данные и начинается заполнение — другие упомянутые режимы заполнения устраняют эту проблему. Если вы шифруете символьные данные (строки), вы можете легко обрезать конечный \x00 с помощью $data = trim($data, «\x00»); .

Чтобы расшифровать данные, отправленные потребителю, потребитель должен знать IV (вектор инициализации) ( $iv ), используемый алгоритм ( MCRYPT_RIJNDAEL_256 /AES-256), режим шифрования ( ECB ), секретный ключ шифрования ( $key ) и используемый режим заполнения ( NULL -padding). IV может передаваться с зашифрованными данными, поскольку его не нужно хранить в секрете:

IV должен быть известен получателю зашифрованной информации, которая должна быть способный расшифровать его. Это может быть обеспечивается несколькими способами: передавая IV вместе с зашифрованный текст, соглашаясь на это заранее во время обмена ключами или рукопожатие, вычисляя его (обычно поэтапно), или измерение таких параметров, как ток времени (используется в аппаратной аутентификации маркеры, такие как RSA SecurID, VASCO Digipass и т.д.), Идентификаторы, такие как отправитель и/или адрес получателя или идентификатор, файл ID, пакет, сектор или кластер число и т.д. Ряд переменных может быть объединены или хэшированы вместе, в зависимости от протокола. В зависимости от протокола.

Многое из того, что я собираюсь объяснить, можно почерпнуть из @ircmaxwell отлично slidedeck: Криптография для среднего разработчика, которую вы должны проверить немедленно. Я повторю один из его основных моментов: Избегайте написания кода, который посвящен шифрованию/расшифровке. Если вы не поймете все факторы, которые вы, вероятно, взломаете.

MCRYPT_RIJNDAEL_128 близко соответствует AES

Advanced Encryption Standard был создан Национальным институтом стандартов и технологий. NIST выбрал Rijandael cipher из конкурентного пула криптографических экспертов.

Общая путаница: числа в AES и Mycrpt относятся к разным вещам

  • AES-128 относится к размеру 128 бит
  • AES-256 относится к размеру 256-битного ключа
  • MCRYPT_RIJNDAEL_128 ссылается на размер блока 128-битного шифрования
  • MCRYPT_RIJNDAEL_256 относится к размеру блока 256-битного шифратора

Размер ключа и размер блока

Размер ключа относится к длине тайны, используемой для шифрования/дешифрования. 256-битный ключ — 32 байта, примерно 32 символа.

Размер блока является свойством блочных шифров (т.е. всех кандидатов AES), которые вырезают данные для определенный размер во время процесса шифрования.

  • AES указывает 128-битный блок шифрования
  • Mcrypt Rijndaels принимают 256-битные ключи
  • на основе размера ключа/блока MCRYPT_RIJNDAEL_128, похоже, соответствует ближайшей к AES-256
    • Есть и другие факторы, которые следует учитывать — например, сколько раундов трансформации происходит? — трудно проверить этот аспект, не врываясь в исходный код.

Режим работы

Режим является важным элементом.

Оба режима ECB и CBC помещают ваш открытый текст в размер блока. Если вы шифруете 1 байт данных с 128-битным размером блока, вы получите 15 нулевых байтов. Заполнение открывает возможность для дополнения атаки оракула.

Помимо дополнения ECB не использует вектор инициализации (IV), который оставляет вас открытым потенциальная уязвимость: предпочитайте CBC или CFB.

Вы можете избежать обеих проблем, используя режим CFB который не нуждается в дополнении и, следовательно, не требует сообщения -decryption обрезка.

Илон Маск рекомендует:  Что такое код scrolldc

Вектор инициализации (IV)

При создании вашего IV вам нужен криптосильный случайный источник: MCRYPT_RAND не является случайным — MCRYPT_DEV_RANDOM или MCRYPT_DEV_URANDOM являются предпочтительными.

Наконец, для ваших друзей

Чтобы расшифровать ваш друг, вам нужно знать:

  • шифр — MCRYPT_RIJNDAEL_128
  • режим блока — MCRYPT_MODE_CFB
  • IV — каждый элемент, который вы шифруете, должен получить уникальный IV, поэтому вы захотите добавить IV к зашифрованным данным.
  • ключ — это секрет, и он должен оставаться неизменным для всех шифров; если ваш ключ скомпрометирован, поверните его.

Только ключ должен оставаться в секрете. В зависимости от вашего транспортного метода вы должны рассмотреть возможность внедрения проверки целостности данных, чтобы не зашифровать данные зашифрованного текста. Опять же, см. @ircmaxwell отлично slidedeck: Криптография для среднего разработчика для примера создания отпечатка HMAC с использованием hash_hmac() .

Должно быть очевидно, что обслуживание всех этих движущихся частей изобилует сложностью. Тред тщательно.

Другие шифры

Mcrypt предоставляет вам другие параметры шифрования. Некоторые, например, DES, не рекомендуются. Другие были кандидатами в AES, такие как Blowfish, TwoFish и Serpent. Rijandael — проверенный, проверенный шифр и рекомендуется.

Что такое код mcrypt_get_cipher_name

(PHP 3>= 3.0.8, PHP 4 >= 4.0.0)

mcrypt_get_cipher_name — Get the name of the specified cipher

Description

string mcrypt_get_cipher_name (int cipher)

string mcrypt_get_cipher_name (string cipher)

mcrypt_get_cipher_name() is used to get the name of the specified cipher.

mcrypt_get_cipher_name() takes the cipher number as an argument (libmcrypt 2.2.x) or takes the cipher name as an argument (libmcrypt 2.4.x) and returns the name of the cipher or FALSE , if the cipher does not exist.

Example 1. mcrypt_get_cipher_name() Example

mcrypt_get_cipher_name

mcrypt_get_cipher_name — Gets the name of the specified cipher

Описание

mcrypt_get_cipher_name() is used to get the name of the specified cipher.

mcrypt_get_cipher_name() takes the cipher number as an argument (libmcrypt 2.2.x) or takes the cipher name as an argument (libmcrypt 2.4.x or higher) and returns the name of the cipher or FALSE, if the cipher does not exist.

Список параметров

One of the MCRYPT_ciphername constants or the name of the algorithm as string.

Возвращаемые значения

This function returns the name of the cipher or FALSE, if the cipher does not exist.

Примеры

Пример #1 mcrypt_get_cipher_name() Example

echo mcrypt_get_cipher_name ( $cipher );
?>

Результат выполнения данного примера:

НОВОСТИ ФОРУМА
Рыцари теории эфира
01.10.2020 — 05:20: ВОСПИТАНИЕ, ПРОСВЕЩЕНИЕ, ОБРАЗОВАНИЕ — Upbringing, Inlightening, Education ->
[center][Youtube]69vJGqDENq4[/Youtube][/center]
[center]14:36[/center]
Osievskii Global News
29 сент. Отправлено 05:20, 01.10.2020 г.’ target=_top>Просвещение от Вячеслава Осиевского — Карим_Хайдаров.
30.09.2020 — 12:51: ВОСПИТАНИЕ, ПРОСВЕЩЕНИЕ, ОБРАЗОВАНИЕ — Upbringing, Inlightening, Education ->
[center][Ok]376309070[/Ok][/center]
[center]11:03[/center] Отправлено 12:51, 30.09.2020 г.’ target=_top>Просвещение от Дэйвида Дюка — Карим_Хайдаров.
30.09.2020 — 11:53: ВОСПИТАНИЕ, ПРОСВЕЩЕНИЕ, ОБРАЗОВАНИЕ — Upbringing, Inlightening, Education ->
[center][Youtube]VVQv1EzDTtY[/Youtube][/center]
[center]10:43[/center]

интервью Раввина Борода https://cursorinfo.co.il/all-news/rav.
мой телеграмм https://t.me/peshekhonovandrei
мой твиттер https://twitter.com/Andrey54708595
мой инстаграм https://www.instagram.com/andreipeshekhonow/

[b]Мой комментарий:
Андрей спрашивает: Краснодарская синагога — это что, военный объект?
— Да, военный, потому что имеет разрешение от Росатома на манипуляции с радиоактивными веществами, а также иными веществами, опасными в отношении массового поражения. Именно это было выявлено группой краснодарцев во главе с Мариной Мелиховой.

[center][Youtube]CLegyQkMkyw[/Youtube][/center]
[center]10:22 [/center]

Доминико Риккарди: Россию ждёт страшное будущее (хотелки ЦРУ):
https://tainy.net/22686-predskazaniya-dominika-rikardi-o-budushhem-rossii-sdelannye-v-2000-godu.html

Завещание Алена Даллеса / Разработка ЦРУ (запрещено к ознакомлению Роскомнадзором = Жид-над-рус-надзором)
http://av-inf.blogspot.com/2013/12/dalles.html

[center][b]Сон разума народа России [/center]

[center][Youtube]CLegyQkMkyw[/Youtube][/center]
[center]10:22 [/center]

Доминико Риккарди: Россию ждёт страшное будущее (хотелки ЦРУ):
https://tainy.net/22686-predskazaniya-dominika-rikardi-o-budushhem-rossii-sdelannye-v-2000-godu.html

Завещание Алена Даллеса / Разработка ЦРУ (запрещено к ознакомлению Роскомнадзором = Жид-над-рус-надзором)
http://av-inf.blogspot.com/2013/12/dalles.html

[center][b]Сон разума народа России [/center]

Обновление моей библиотеки шифрования с Mcrypt до OpenSSL


Я использую приведенную ниже общедоступную библиотеку для шифрования. Я хочу обновить его до OpenSSL от Mcrypt, чтобы я больше не использовал устаревшую библиотеку.

Я пытаюсь выяснить, возможно ли это вообще. Я провел некоторые исследования по этому вопросу, но нашел противоречивую информацию:

В этом сообщении говорится, что невозможно расшифровать данные с помощью OpenSSL, который был зашифрован с помощью Mcrypt.
https://stackoverflow.com/a/19748494/5834657

Тем не менее, в этом посте говорится, что это возможно с помощью заполнения. Похоже, что моя функция использует отступы. Это правильный тип заполнения, необходимого для этой работы?
https://stackoverflow.com/a/31614770/5834657

Обновление: я пытался расшифровать строку, зашифрованную Mcrypt с использованием OpenSSL, преобразовав библиотеку в OpenSSL.

Затем я шифрую строку, используя ключ, используя приведенный выше код, и пытаюсь расшифровать это значение, используя приведенный ниже код и тот же ключ. Однако я просто получаю пустой ответ. Если я закомментирую:

$ data = $ this-> unpad ($ dec)

в функции расшифровки я получаю строку, но она просто перемешивает символы (так же, как это выглядит при первом шифровании).

Решение

Этот код для вашей процедуры расшифровки работает для меня:

Если вы можете подтвердить, что это работает и для вас, я могу привести в порядок ответ и добавить окончательный рабочий код.

Getting all possible key sizes for PHP MCrypt Ciphers

I’m creating public packages, There are some encryption there, I let developer to choose cipher type and mode and set the key for encryption part of the packeges. Now I need to check the key size before using it in MCrypt functions. So what I have to know is:

1) All possible key sizes for the cipher.

2) Byte size of the given key.

Or if you have a better way, please share it.

1 Answer 1

  • mcrypt_list_algorithms() gives you the list of ciphers
  • mcrypt_module_get_supported_key_sizes($cipher) gives you the supported key sizes (is empty if the keysizes are continous)
  • mcrypt_module_get_algo_key_size($cipher) gives you the maximum key size in case the previous function returned nothing

All key sizes are given in bytes.

Use strlen($input) to retrieve the bytes in a given string (should be decoded).

Not the answer you’re looking for? Browse other questions tagged php encryption mcrypt or ask your own question.

Hot Network Questions

Subscribe to RSS

To subscribe to this RSS feed, copy and paste this URL into your RSS reader.

site design / logo © 2020 Stack Exchange Inc; user contributions licensed under cc by-sa 4.0 with attribution required. rev 2020.11.12.35412

Что такое код mcrypt_get_cipher_name

MD5 далеко не всегда уместен. Например, он бесполезен, когда нам нужно зашифровать информацию о кредитной карте, а затем расшифровать ее.

Одно из простейших решений — это модуль Mcrypt, доступный в виде РНР-расширения. Библиотека Mcrypt позволяет выполнить высокоуровневое шифрование. Mcrypt предоставляет на выбор более 30 шифров, которыми вы можете шифровать ваши данные. Для использования Mcrypt нужно перекомпилировать РНР с поддержкой Mcrypt, как это было показано в #18.

Теперь поговорим об использовании Mcrypt. Следующий сценарий показывает, как использовать Mcrypt для шифрования и дешифрования данных:

Функции mcrypt () нужно передать следующую информацию:
• Данные, которые нужно зашифровать.
• Парольную фразу, необходимую для шифрования и дешифрования данных; она называется ключом.
• Шифр, используемый для шифрования данных, определяющий алгоритм шифрования. В сценарии используется алгоритм MCRYPT_SERPENT_25 6, но вы можете использовать другие алгоритмы, в том числе MCRYPT_TWOFISH192, MCRYPT_RC2, MCRYPT_DES и MCRYPT_L0KI97.

Примечание.
Чтобы узнать, какие шифры поддерживаются вашим сервером, прочитайте п. #8. Если расширение Mcrypt установлено, то в выводе phpinfо() в секциях Supported Cipher и Supported Modes вы увидите список поддерживаемых шифров и режимов, соответственно.

• Режим (параметр mode) используется для шифрования данных. Вы можете использовать несколько режимов, в том числе Electronic Codebook и Cipher Feedback. Данный сценарий использует Cipher Block Chaining — MCRYPT_MODE_CBC.

• Вектор инициализации, также известен как IV, или seed — дополнительный бит бинарных данных, используемый алгоритмом шифрования. Вектор инициализации делает шифр более сложным для расшифровки.

• Длину строки, необходимой для ключа и IV, которая может варьироваться шифром и блоком. Используйте функции mcrypt_get_key__size () и mcrypt_get_block_size () для нахождения соответствующей длины. Затем значение ключа нуж-но урезать до значения, возвращенного функцией mcrypt_get_ key__size(); это делается функцией substr (). Если ключ короче, чем требуемое значение, — не волнуйтесь: Mcrypt заполнит недостающие символы нулями.

Даже если кто-то завладеет данными и парольной фразой, ему еще пред-стоит подобрать нужный шифр. Для большей безопасности мы используем функцию md5 () для шифрования ключа перед его использованием, так что, даже если злоумышленник завладеет парольной фразой, он не получит того, что ожидает.

Злоумышленнику нужно знать функцию, данные и парольную фразу -и только в этом случае он, возможно, получит доступ к вашему серверу.

При использовании Mcrypt нужно учитывать одну проблему. Mcrypt возвращает данные в бинарном виде, что приводит к ошибкам при попытке их сохранить в базе данных MySQL. Поэтому мы используем функции base64encode () и base64decode () для преобразования данных в SQL-совместимый вид.

Вы можете поэкспериментировать с разными методами шифрования. Также можно сделать сценарий более удобным, объявив глобальные константы в подключаемом файле (см. #1), в которых будет храниться ключ и выбранный режим.

Криптография в Java. Класс Cipher

Привет, Хабр! Представляю вашему вниманию перевод второй статьи «Java Cipher» автора Jakob Jenkov из серии статей для начинающих, желающих освоить основы криптографии в Java.

Оглавление:

Java Cipher (Шифр)

Класс Java Cipher (javax.crypto.Cipher) представляет собой алгоритм шифрования. Термин «Шифр» является стандартным термином для алгоритма шифрования в мире криптографии. Вот почему класс Java называется Шифр(Cipher), а не Шифратор / Дешифратор или как-то еще. Вы можете использовать экземпляр Cipher для шифрования и расшифровки данных в Java. В этой главе объясняется, как работает класс Cipher.

Создание шифра

Прежде чем использовать шифр, необходимо создать экземпляр класса Cipher, вызывая его метод getInstance() с параметром, указывающим, какой тип алгоритма шифрования вы хотите использовать. Вот пример создания экземпляра Java Cipher:

В этом примере создается экземпляр Cipher с использованием алгоритма шифрования AES.

Режимы шифрования

Некоторые алгоритмы шифрования могут работать в разных режимах. Режим шифрования определяет детали того, как будут зашифрованы данные. Таким образом, режим шифрования частично влияет на алгоритм шифрования. Режимы шифрования могут иногда использоваться в нескольких различных алгоритмах шифрования — как метод, который добавляется к основному алгоритму шифрования. Вот почему режимы рассматриваются отдельно от самих алгоритмов шифрования, а скорее как «дополнения» к алгоритмам шифрования. Вот некоторые из наиболее известных режимов шифрования:

При создании экземпляра шифра вы можете добавить его режим к имени алгоритма шифрования. Создать экземпляр AES Cipher с использованием режима сцепления блоков — Cipher Block Chaining (CBC), можно так:

Поскольку режим сцепления блоков шифрования также требует «схемы дополнения», схема дополнения (PKCS5Padding) добавляется в конец строки имени алгоритма шифрования.
Важно знать, что не все алгоритмы и режимы шифрования поддерживаются поставщиком шифрования Java SDK по умолчанию. Для создания нужного вам экземпляра шифра с требуемым режимом и схемой заполнения может понадобиться установить сторонний провайдер, такой как Bouncy Castle.

Инициализация шифра

Прежде чем использовать экземпляр Cipher, его необходимо инициализировать. Инициализация шифра выполняется путем вызова его метода init(). Метод init() принимает два параметра:

Пример инициализации экземпляра Cipher в режиме шифрования:

А вот пример инициализации экземпляра Cipher уже в режиме расшифровки:

Шифрование и расшифровка данных

Чтобы зашифровать или расшифровать данные с помощью экземпляра Cipher, вызывается один из этих двух методов:

Существует несколько переопределенных версий методов update() и doFinal(), которые принимают разные параметры. Рассмотрим наиболее часто используемые здесь. Если вам необходимо зашифровать или расшифровать один блок данных, просто вызовите doFinal() с данными для шифрования или расшифровки. Пример:

На самом деле код выглядит примерно так же и в случае расшифровки данных. Просто помните, что экземпляр Cipher должен быть инициализирован в режиме расшифровки. Вот как выглядит расшифровка одного блока зашифрованного текста:

Если вам нужно зашифровать или расшифровать большой файл разбитый на несколько блоков, вызывается update() один раз для каждого блока данных и завершается вызовом метода doFinal() с последним блоком данных. Вот пример шифрования нескольких блоков данных:

Причина, по которой вызов doFinal() необходим для последнего блока данных, заключается в том, что некоторые алгоритмы шифрования должны дополнять данные, чтобы соответствовать определенному размеру блока шифра (например, 8-байтовой границе). Дополнять же промежуточные зашифрованные данные нет необходимости. Следовательно, вызывается метод update() для промежуточных блоков данных и вызов doFinal() для последнего блока данных.
При расшифровке нескольких блоков данных вы также вызываете метод update() для промежуточных блоков данных и метод doFinal() для последнего блока. Пример расшифровки нескольких блоков данных:

Опять же, экземпляр шифра должен быть инициализирован в режиме дешифровки, чтобы этот пример работал.

Шифрование / Расшифровка части байтового массива

Методы шифрования и расшифровки класса Cipher могут шифровать или расшифровывать часть данных, хранящихся в байтовом массиве. Методу update() и/или doFinal() нужно передать смещение и длину.

В данном примере будут зашифрованы (или расшифрованы, в зависимости от инициализации шифра) байты с 10 индекса и на 24 байта вперед.

Шифрование / Расшифровка в существующий байтовый массив

Все приведенные в этой главе примеры шифрования и дешифрования возвращают зашифрованные или дешифрованные данные в новом байтовом массиве. Однако также возможно зашифровать или расшифровать данные в существующий байтовый массив. Это может быть полезно для уменьшения количества созданных байтовых массивов. Для этого необходимо передать целевой массив байтов в качестве параметра методу update() и/или doFinal().

В этом примере данные шифруются с 10 индекса на 24 байта вперед в байтовый массив dest со смещением 0. Если вы хотите установить другое смещение для байтового массива dest, существуют версии update() и doFinal(), которые принимают дополнительный параметр смещения. Пример вызова метода doFinal() со смещением в массиве dest:

Повторное использование экземпляра шифра

Инициализация экземпляра Cipher — дорогостоящая операция и хорошей идеей будет повторное использование экземпляров Cipher. К счастью, класс Cipher был разработан с учетом возможности повторного использования. Когда вы вызываете метод doFinal() для экземпляра Cipher, он возвращается в состояние, в котором находился сразу после инициализации. Экземпляр Cipher может затем использоваться для шифрования или дешифрования большего количества данных.

Пример повторного использования экземпляра Java Cipher:

Сначала создается и инициализируется экземпляр Cipher, а затем используется для шифрования двух блоков согласованных данных. Обратите внимание на вызов update(), а затем doFinal() для этих двух блоков данных. После этого экземпляр Cipher может быть снова использован для шифрования данных. Это делается с помощью вызова doFinal() с третьим блоком данных. После этого вызова doFinal() вы можете зашифровать еще один блок данных с тем же экземпляром Java Cipher.

Что такое код mcrypt_get_cipher_name

(PHP 3>= 3.0.8, PHP 4 >= 4.0.0)

mcrypt_get_cipher_name — Get the name of the specified cipher

Description

string mcrypt_get_cipher_name (int cipher)

string mcrypt_get_cipher_name (string cipher)

mcrypt_get_cipher_name() is used to get the name of the specified cipher.

mcrypt_get_cipher_name() takes the cipher number as an argument (libmcrypt 2.2.x) or takes the cipher name as an argument (libmcrypt 2.4.x) and returns the name of the cipher or FALSE , if the cipher does not exist.

Example 1. mcrypt_get_cipher_name() Example

Шифрование / расшифровка файла с Mcrypt

Попытка написать несколько функций, которые будут шифровать или расшифровывать файл и я использую класс нашел здесь, чтобы попытаться сделать это:

Функция шифрования ниже, кажется, работает, в том, что она, как представляется, зашифровать файл и поместить его в заданном каталоге. Я пытаюсь расшифровать файл сейчас, и он просто умирает с сообщением «Не удалось выполнить дешифрование» (который кодируется там . ) Там нет ничего в журналах ошибок PHP, так что я не знаю, почему он терпит неудачу , но, как Mcrypt совершенно новое для меня, я больше склонен верить, что я делаю что-то здесь не так .

Попробуйте это PHP5 класс для шифрования с использованием Mcrypt. В этом случае он использует шифрование AES. Вы хотите, чтобы изменить ключ для каждого сайта, который вы используете его. Если вы не используете его, по крайней мере он может направить вас на написание собственной версии.

  • Этот класс не является безопасным для использования с двоичными данными (которые могут закончиться в NUL байт)
  • Этот класс не обеспечивает аутентификацию шифрования.

В то время как Джонс ответ хорош, используя кодирование base64 просто исправить бинарная проблема безопасности является излишеством и сделает ваши зашифрованные файлы 33% больше, чем в оригинале. Вот мой PHP Реализация файлового формата AES Crypt, который решает все вышеуказанные вопросы, прозрачно.

Это бинарное безопасно и включает в себя аутентификацию шифрования. Так как она использует открытый источник äes формат файла (крипта .aes) он полностью совместим с другими .aes программного обеспечения.

Интерфейс довольно прост ли вы шифрование или дешифрование. Вы просто дать ему исходный файл и пароль.

Вы не должны использовать Mcrypt для шифрования / дешифрования данных. Как показано в вашем вопросе, и в принятом ответе, данные не прошел проверку подлинности, что означает, что он станет жертвой выбранных атак зашифрованного.

Кроме того, много усилий было сделано, чтобы убедиться, что разработчики собрали криптографических примитивов правильно. Таким образом, вместо того, чтобы Mcrypt, вы должны использовать libsodium для PHP проектов. libsodium форк NaCl. NaCl / libsodium написано, чтобы удалить много криптографических ошибки, которые разработчики находят себя, например, синхронизации атак с проверкой тегов MAC.

Mcrypt является устаревшим в PHP 7.1 и libsodim является предпочтительным способом обработки криптографии в PHP.

Использование libsodium в вашем PHP проекта легко и безопасно. Скотт Арцишевского написал обширную книгу об использовании libsodium с PHP на https://paragonie.com/book/pecl-libsodium . Это стоит прочитать для тех , кто делает PHP криптографию.

CakePHP имеет очень хорошую реализацию в Rijndael. Я не разместить код прямо здесь , потому что не уверен , что правовые последствия.

Вот API Docs для Security::rijndael() метода.

Если кодирование файла, вы хотите , чтобы base64_encode() перед вызовом этого метода с « encrypt », и base64_decode() после вызова этого метода с « decrypt »

Илон Маск рекомендует:  Что такое код mcal_create_calendar
Понравилась статья? Поделиться с друзьями:
Кодинг, CSS и SQL