Что такое код mdecrypt_generic

mdecrypt_generic

(PHP 4 >= 4.0.2, PHP 5)

mdecrypt_generic — Decrypts data

Description

This function decrypts data. Note that the length of the returned string can in fact be longer than the unencrypted string, due to the padding of the data.

Parameters

An encryption descriptor returned by mcrypt_module_open()

Examples

Example #1 mdecrypt_generic() Example

/* Data */
$key = ‘this is a very long key, even too long for the cipher’ ;
$plain_text = ‘very important data’ ;

/* Open module, and create IV */
$td = mcrypt_module_open ( ‘des’ , » , ‘ecb’ , » );
$key = substr ( $key , 0 , mcrypt_enc_get_key_size ( $td ));
$iv_size = mcrypt_enc_get_iv_size ( $td );
$iv = mcrypt_create_iv ( $iv_size , MCRYPT_RAND );

/* Initialize encryption handle */
if ( mcrypt_generic_init ( $td , $key , $iv ) != — 1 ) <

/* Encrypt data */
$c_t = mcrypt_generic ( $td , $plain_text );
mcrypt_generic_deinit ( $td );

/* Reinitialize buffers for decryption */
mcrypt_generic_init ( $td , $key , $iv );
$p_t = mdecrypt_generic ( $td , $c_t );

/* Clean up */
mcrypt_generic_deinit ( $td );
mcrypt_module_close ( $td );
>

if ( strncmp ( $p_t , $plain_text , strlen ( $plain_text )) == 0 ) <
echo «ok\n» ;
> else <
echo «error\n» ;
>
?>

The example above shows how to check if the data before the encryption is the same as the data after the decryption. It is very important to reinitialize the encryption buffer with mcrypt_generic_init() before you try to decrypt the data.

The decryption handle should always be initialized with mcrypt_generic_init() with a key and an IV before calling this function. Where the encryption is done, you should free the encryption buffers by calling mcrypt_generic_deinit() . See mcrypt_module_open() for an example.

See Also

  • mcrypt_generic() — This function encrypts data
  • mcrypt_generic_init() — This function initializes all buffers needed for encryption
  • mcrypt_generic_deinit() — This function deinitializes an encryption module

Расшифровать данные зашифрованы с MCRYPT_RIJNDAEL_128

CCAvenue использует MCRYPT_RIJNDAEL_128 для шифрования данных транзакции. Так как мой сервер PHP 7.1, Im не в состоянии расшифровать эти данные.

Есть ли обходной путь, чтобы расшифровать эту строку на PHP 7.1 или Должен ли я понизить до PHP 5, чтобы получить эту работу.

Дешифрирование код из ccavenue

Ответ на дешифрования

Хорошо. Оказывается наш CCAvenue подтолкнул совместимую версию PHP 7.1.

Open SSL совместимая версия коды

Попробуйте использовать openssl_encrypt ($ ввода, ‘AES-128-CBC’, «KEY», OPENSSL_RAW_DATA, $ IV);

generic code

Универсальный англо-русский словарь . Академик.ру . 2011 .

Смотреть что такое «generic code» в других словарях:

Generic programming — is a style of computer programming in which algorithms are written in terms of to be specified later types that are then instantiated when needed for specific types prov >Wikipedia

Generic Framing Procedure — (GFP) is a multiplexing technique defined by ITU T G.7041. This allows mapping of variable length, higher layer client signals over a transport network like SDH/SONET. The client signals can be protocol data unit (PDU) oriented (like IP/PPP or… … Wikipedia

Code-excited linear prediction — (CELP) is a speech coding algorithm originally proposed by M.R. Schroeder and B.S. Atal in 1985. At the time, it prov >Wikipedia

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

Code excited linear prediction — (CELP) is a speech coding algorithm originally proposed by M.R. Schroeder and B.S. Atal in 1985. At the time, it prov >Wikipedia

Generic System — est un progiciel de gestion intégré muni d une interface Web RIA (Rich Internet Application) et d un moteur d information totalement paramétrable. Il s appuie sur le moteur d information (GS Core) qui répond à la norme UML. Les différents modules … Wikipédia en Français

Generic Framing Procedure — (GFP) ist eine Multiplexing Technik, die in der ITU T G.7041 definiert ist. Sie ermöglicht es, Datenströme von Anwendungen aus einer höheren Netzwerkschicht über ein Transportnetzwerk wie SDH/SONET zu leiten, wobei die Paketgrößen variabel sein… … Deutsch Wikipedia

Code reuse — Code reuse, also called software reuse, is the use of existing software, or software knowledge, to build new software.[1] Contents 1 Overview 2 Types of reuse 3 Examples … Wikipedia

Code folding — is a feature of some text editors, source code editors and >Wikipedia

generic top level domain — (gTLD) A generic abbreviation in a domain name originally used to describe the nature of the applicant; for example .com (which indicates that a domain name is a commercial entity), .edu (indicating an educational establishment) or .gov (a… … Law dictionary

generic top-level domain — (gTLD) A generic abbreviation in a domain name originally used to describe the nature of the applicant; for example .com (which indicates that a domain name is a commercial entity), .edu (indicating an educational establishment) or .gov (a… … Law dictionary

Code 13 — Origin Minneapolis, Minnesota Genres Hardcore punk Thrashcore Crust punk Powerviolence Years active 1995 2000 … Wikipedia

mdecrypt_generic

(PHP 4 >= 4.0.2, PHP 5)

mdecrypt_generic — Decrypt data

Description

This function decrypts data. Note that the length of the returned string can in fact be longer then the unencrypted string, due to the padding of the data.

Examples

Example #1 mdecrypt_generic() example

/* Data */
$key = ‘this is a very long key, even too long for the cipher’ ;
$plain_text = ‘very important data’ ;

/* Open module, and create IV */
$td = mcrypt_module_open ( ‘des’ , » , ‘ecb’ , » );
$key = substr ( $key , 0 , mcrypt_enc_get_key_size ( $td ));
$iv_size = mcrypt_enc_get_iv_size ( $td );
$iv = mcrypt_create_iv ( $iv_size , MCRYPT_RAND );

/* Initialize encryption handle */
if ( mcrypt_generic_init ( $td , $key , $iv ) != — 1 ) <

/* Encrypt data */
$c_t = mcrypt_generic ( $td , $plain_text );
mcrypt_generic_deinit ( $td );

/* Reinitialize buffers for decryption */
mcrypt_generic_init ( $td , $key , $iv );
$p_t = mdecrypt_generic ( $td , $c_t );

/* Clean up */
mcrypt_generic_deinit ( $td );
mcrypt_module_close ( $td );
>

if ( strncmp ( $p_t , $plain_text , strlen ( $plain_text )) == 0 ) <
echo «ok\n» ;
> else <
echo «error\n» ;
>
?>

The above example shows how to check if the data before the encryption is the same as the data after the decryption. It is very important to reinitialize the encryption buffer with mcrypt_generic_init() before you try to decrypt the data.

The decryption handle should always be initialized with mcrypt_generic_init() with a key and an IV before calling this function. Where the encryption is done, you should free the encryption buffers by calling mcrypt_generic_deinit(). See mcrypt_module_open() for an example.

I have a generic implementation of PHP mcrypt module and its not decrypting

No idea why this isn’t working, everything seems to be fine on my end.. i tried decrypting it with mcrypt_cbc(); and it decrypted it properly.. so it has something to do with my mdecrypt_generic.. any ideas?

1 Answer 1

You need to run mcrypt_generic_init to reset all buffers with the same values again before mdecrypt_generic .

Not the answer you’re looking for? Browse other questions tagged php 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.

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

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

Шифрование данных на PHP

Дата публикации: 2013-11-18

От автора: в данном уроке мы с Вами рассмотрим шифрование данных стандартными средствами языка PHP. Так как при создании различных скриптов очень часто возникает задача шифрования данных. К примеру, важную информацию, которую необходимо сохранить в куках, можно зашифровать для повышения безопасности сайта.

Введение

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

Шифрование бывает двух видов: однонаправленное – когда данные можно только зашифровать, а расшифровать нельзя (к примеру, шифрование md5) и двунаправленное – когда есть возможность, как зашифровать, так и расшифровать данные. В данном уроке мы будем использовать двунаправленное шифрование. Для работы с шифрованием в языке PHP разработано расширение под названием mcrypt, которое позволяет шифровать данные используя различные алгоритмы шифрования (шифры).

Как создать сайт самому?

Какие технологии и знания необходимы сегодня, чтобы создавать сайты самостоятельно? Узнайте на интенсиве!

Хочу сразу сказать ,что не стоит самому придумывать свой алгоритм шифрования.

Так как шифрование данных – это целая наука и при создании собственного алгоритма, Вы можете не учесть множество различных моментов. Что приведет к уязвимости зашифрованных данных и возможно к взлому их злоумышленниками. Лучше всего использовать уже готовые алгоритмы, которые очень надежны и, так сказать, проверены временем. Алгоритм шифрования – это собственно то, каким образом будут зашифрованы данные.

Каждый алгоритм поддерживает различные режимы шифрования. Режим шифрование – это метод применения блочного шифра, который позволяет преобразовать последовательность блоков исходного текста, который шифруется, в последовательность блоков зашифрованных данных. При этом при шифровании могут использоваться данные других блоков. Мы с Вами будем использовать один из лучших режимов шифрования — MCRYPT_MODE_CFB. Данный режим, еще называют режимом обратной связи по шифрованному тексту, т.е — это такой вариант использования блочного шифра, при котором для зашифровки следующего блока текста используется результат зашифровки предыдущего блока.

Полную документацию, по расширению mcrypt можно посмотреть на официальном сайте интерпретатора языка PHP, по адресу: http://us3.php.net/manual/ru/book.mcrypt.php

Полный перечень всех алгоритмов шифрования можно посмотреть по следующей ссылке: http://us3.php.net/manual/ru/mcrypt.ciphers.php

Теперь давайте приступим к шифрованию данных.

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

Для начала давайте создадим небольшую форму для ввода текста, подлежащего шифрованию:

Должен ли я обрезать расшифрованную строку после mcrypt_decrypt?

У меня есть код, который выглядит примерно так:

Я волнуюсь, что в процессе декодирования mcrypt_decrypt вводит безвозмездное пробел или нулевые символы на задней или передней части $decrypted_string .

Так я должен обрезать его?

Примечание. Я мог бы запустить код и узнать об этом. Но поскольку я никогда не смогу запустить достаточное количество проб, чтобы доказать (или опровергнуть) мою мысль, я хочу получить конкретные и теоретические ответы, вероятно, исходя из внутренней работы алгоритма mcrypt_decrypt . Еще одна причина, по которой я спрашиваю, это то, что я верю, что это поможет другим.

Примечание 2: Несмотря на приведенный ниже ответ (теперь удалены, и только пользователи из 10K могут это увидеть) , кажется, что в примерах здесь используется обрезка, чтобы получить правильную расшифрованную строку.

Фактически оба mcrypt_encrypt() и mcrypt_decrypt() а также другие функции en- / decryption (например, mcrypt_generic() или mdecrypt_generic() ) mdecrypt_generic() параметр $data длиной n * > . Символ заполнения – это NUL ( \x0 или \0 ), тогда как > зависит от используемых шифров и используемых режимов блочного шифрования. Вы должны взглянуть на режимы блочного шифрования и заполнение (криптография) .

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

Ниже приведен вывод mcrypt_get_block_size() для каждого из доступных шифров и режимов на моей машине. Очевидно, что функция не учитывает, что такие режимы, как CFB, OFB и CTR , не требуют каких-либо специальных мер для обработки сообщений, длины которых не являются кратными размеру блока, поскольку все они работают с помощью XORing открытого текста с выходом блока шифр (цитата из Википедии). CBC, который используется в вашем примере, всегда требует, чтобы последний блок был дополнен до шифрования.

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

В моей реализации TripleDES я обнаружил, что расшифрованная строка была дополнена символами \ 5 или \ 6. Это были не ожидаемые символы \ 0 или \ 4, упомянутые выше, или в примерах PHP.net. Для определения значения ASCII символа заполнения используйте функцию ord () . ord () работает с одним символом, поэтому используйте str_split () для разбиения строки или доступа к символу непосредственно с помощью записи массива – $ string [5].

Окончательный результат обрезки – trim($decrypt, «\0..\32»);

Мне пришлось шифровать / дешифровать двоичные данные. К сожалению, trim может разбить двоичные данные и подрезать законные биты, которые приравниваются к нулевому символу.

Для обеспечения того, чтобы размер двоичных данных был таким же до и после шифрования, Rocket Hazmat опубликовал отличный ответ здесь: как я могу дешифровать двоичные данные, которые заканчивались символами NUL в PHP?

Я не уверен в использовании ECB против CBC …

После 24 часов исследований, наконец, это сработало для меня:

PHP Warning mcrypt_generic_init() / mdecrypt_generic() #2267

Comments

Copy link Quote reply

rcubetrac commented Jul 10, 2009

Reported by rosali on 10 Jul 2009 07:43 UTC as Trac ticket #1485970

I get randomly the following error log entries:

01:25:53 PHP Warning: mcrypt_generic_init() href=’function.mcrypt-generic-init’>function.mcrypt-generic-init: Iv size incorrect; supplied length: 0, needed: 8 in C:\xampp\htdocs\webmail\dev\program\include\rcmail.php on line 940

01:25:53 PHP Warning: mdecrypt_generic() href=’function.mdecrypt-generic’>function.mdecrypt-generic: An empty string was passed in C:\xampp\htdocs\webmail\dev\program\include\rcmail.php on line 941

This comment has been minimized.

Copy link Quote reply

rcubetrac commented Jul 10, 2009

Comment by @alecpl on 10 Jul 2009 10:45 UTC

When this happen? If you use any plugins disable them. This could happen when password stored in session is empty. If so, we can add a check to not decrypt empty password/string.

This comment has been minimized.

Copy link Quote reply

rcubetrac commented Jul 10, 2009

Owner changed by @alecpl on 10 Jul 2009 10:45 UTC

This comment has been minimized.

Copy link Quote reply

rcubetrac commented Jul 10, 2009

Comment by rosali on 10 Jul 2009 11:22 UTC

Replying to alec:

When this happen? If you use any plugins disable them. This could happen when password stored in session is empty. If so, we can add a check to not decrypt empty password/string.

I can’t reproduce it. I just see it randomly in my logs. It was already there when I used 0.2.1 and it still there with current SVN. So, I don’t believe it’s one of my plugins for 0.3.

I suggest to just check if $cipher is emty in rmail::decrypt and if so, return «».

Расшифровать данные, зашифрованные с помощью MCRYPT_RIJNDAEL_128

CCAvenue использует MCRYPT_RIJNDAEL_128 для шифрования данных транзакций. Так как мой сервер работает под управлением PHP 7.1, я не могу расшифровать эти данные.

Есть ли обходной путь, чтобы расшифровать эту строку в PHP 7.1, или мне нужно перейти на PHP 5, чтобы это работало.

Код расшифровки ccavenue

Ответ на расшифровку

2 ответа

Хорошо. Оказывается, наша CCAvenue выдвинула версию, совместимую с PHP 7.1.

Open SSL-совместимая версия кода

Попробуйте использовать openssl_encrypt ($ input, ‘AES-128-CBC’, «KEY», OPENSSL_RAW_DATA, $ iv);

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