svn: /phpdoc/pt_BR/trunk/appendices/ filters.xml
[email protected] (André Luis Ferreira da Silva Bacci)
| Newsgroups | php.doc.pt-br |
|---|---|
| Message-ID | <[email protected]> |
ae Sun, 01 Dec 2019 17:34:33 +0000
Revision: http://svn.php.net/viewvc?view=revision&revision=348393
Log:
Update translation.
Changed paths:
U phpdoc/pt_BR/trunk/appendices/filters.xml
svn-diffs-348393.txt
(text/x-diff, 33 KB)
Modified: phpdoc/pt_BR/trunk/appendices/filters.xml
===================================================================
--- phpdoc/pt_BR/trunk/appendices/filters.xml 2019-12-01 15:39:28 UTC (rev 348392)
+++ phpdoc/pt_BR/trunk/appendices/filters.xml 2019-12-01 17:34:33 UTC (rev 348393)
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
-<!-- EN-Revision: 343447 Maintainer: fibbarth Status: ready --><!-- CREDITS: narigone, diegopires, adiel -->
+<!-- EN-Revision: 348383 Maintainer: ae Status: ready --><!-- CREDITS: narigone,diegopires,adiel,fibbarth,ae -->
<appendix xml:id="filters" xmlns="http://docbook.org/ns/docbook" xmlns:xlink="http://www.w3.org/1999/xlink">
<title>Lista de Filtros Disponíveis</title>
<para>
@@ -45,14 +45,15 @@
a função correspondente.
</simpara>
- <simpara>
- <literal>string.rot13</literal>
- O uso desse filtro é equivalente a processar todos os dados da stream com
- a função <function>str_rot13</function>.
- </simpara>
- <example>
+ <section xml:id="filters.string.rot13">
<title>string.rot13</title>
- <programlisting role="php">
+ <simpara>
+ O uso desse filtro é equivalente a processar todos os dados da stream com
+ a função <function>str_rot13</function>.
+ </simpara>
+ <example>
+ <title>string.rot13</title>
+ <programlisting role="php">
<![CDATA[
<?php
$fp = fopen('php://output', 'w');
@@ -61,17 +62,19 @@
/* Saída: Vfgb é hz grfgr. */
?>
]]>
- </programlisting>
- </example>
+ </programlisting>
+ </example>
+ </section>
- <simpara>
- <literal>string.toupper</literal>
- O uso desse filtro é equivalente a processar todos os dados da stream com
- a função <function>strtoupper</function>.
- </simpara>
- <example>
+ <section xml:id="filters.string.toupper">
<title>string.toupper</title>
- <programlisting role="php">
+ <simpara>
+ O uso desse filtro é equivalente a processar todos os dados da stream com
+ a função <function>strtoupper</function>.
+ </simpara>
+ <example>
+ <title>string.toupper</title>
+ <programlisting role="php">
<![CDATA[
<?php
$fp = fopen('php://output', 'w');
@@ -80,17 +83,19 @@
/* Saída: ISTO é UM TESTE. */
?>
]]>
- </programlisting>
- </example>
+ </programlisting>
+ </example>
+ </section>
- <simpara>
- <literal>string.tolower</literal>
- O uso desse filtro é equivalente a processar todos os dados da stream com
- a função <function>strtolower</function>.
- </simpara>
- <example>
+ <section xml:id="filters.string.tolower">
<title>string.tolower</title>
- <programlisting role="php">
+ <simpara>
+ O uso desse filtro é equivalente a processar todos os dados da stream com
+ a função <function>strtolower</function>.
+ </simpara>
+ <example>
+ <title>string.tolower</title>
+ <programlisting role="php">
<![CDATA[
<?php
$fp = fopen('php://output', 'w');
@@ -99,22 +104,26 @@
/* Saída: isto é um teste. */
?>
]]>
- </programlisting>
- </example>
+ </programlisting>
+ </example>
+ </section>
- <simpara>
- <literal>string.strip_tags</literal>
- (desde o PHP 5.0.0)
- O uso desse filtro é equivalente a processar todos os dados da stream com
- a função <function>strip_tags</function>.
- Ela aceita parâmetros em uma das duas formas:
- Ou como uma string contendo uma lista de tags similares ao
- segundo parâmetro da função <function>strip_tags</function>,
- ou como um array com os nomes das tags.
- </simpara>
- <example>
+ <section xml:id="filters.string.strip_tags">
<title>string.strip_tags</title>
- <programlisting role="php">
+ <simpara>
+ O uso desse filtro é equivalente a processar todos os dados da stream com
+ a função <function>strip_tags</function>.
+ Ela aceita parâmetros em uma das duas formas:
+ Ou como uma string contendo uma lista de tags similares ao
+ segundo parâmetro da função <function>strip_tags</function>,
+ ou como um array com os nomes das tags.
+ </simpara>
+ <para>
+ &warn.deprecated.feature-7-3-0;
+ </para>
+ <example>
+ <title>string.strip_tags</title>
+ <programlisting role="php">
<![CDATA[
<?php
$fp = fopen('php://output', 'w');
@@ -130,9 +139,9 @@
/* Saída: <b>texto em negrito</b> aumentado para um heading de nível 1 */
?>
]]>
- </programlisting>
- </example>
-
+ </programlisting>
+ </example>
+ </section>
</section>
<section xml:id="filters.convert">
@@ -140,32 +149,31 @@
<simpara>
Como todos os filtros string.*, os filtros convert.* realizam ações
- similares aos seus nomes. Os filtros de conversão foram adicionados com o
- PHP 5.0.0.
+ similares aos seus nomes.
Para mais informações sobre um determinado filtro, veja a página do manual para
a função correspondente.
</simpara>
- <simpara>
- <literal>convert.base64-encode</literal> e
- <literal>convert.base64-decode</literal>
- O uso desses filtros é equivalente a processar todos os dados da stream com as
- funções <function>base64_encode</function> e <function>base64_decode</function>
- respectivamente.
- <literal>convert.base64-encode</literal> suporta parâmetros no formato de
- um array associativo. Se <parameter>line-length</parameter> for passado, a
- saída do base64 será dividida em pedaços de <parameter>line-length</parameter>
- caracteres cada. Se <parameter>line-break-chars</parameter> for passado, cada
- pedaço será delimitado pelos caracteres passados. Esses parâmetros dão o
- mesmo efeito que usar <function>base64_encode</function> com
- <function>chunk_split</function>.
- </simpara>
- <example>
- <title>
- convert.base64-encode &
- convert.base64-decode
- </title>
- <programlisting role="php">
+ <section xml:id="filters.convert.base64">
+ <title>convert.base64-encode e convert.base64-decode</title>
+ <simpara>
+ O uso desses filtros é equivalente a processar todos os dados da stream com as
+ funções <function>base64_encode</function> e <function>base64_decode</function>
+ respectivamente.
+ <literal>convert.base64-encode</literal> suporta parâmetros no formato de
+ um array associativo. Se <parameter>line-length</parameter> for passado, a
+ saída do base64 será dividida em pedaços de <parameter>line-length</parameter>
+ caracteres cada. Se <parameter>line-break-chars</parameter> for passado, cada
+ pedaço será delimitado pelos caracteres passados. Esses parâmetros dão o
+ mesmo efeito que usar <function>base64_encode</function> com
+ <function>chunk_split</function>.
+ </simpara>
+ <example>
+ <title>
+ convert.base64-encode &
+ convert.base64-decode
+ </title>
+ <programlisting role="php">
<![CDATA[
<?php
$fp = fopen('php://output', 'w');
@@ -190,29 +198,30 @@
/* Saída: Isto é um teste. */
?>
]]>
- </programlisting>
- </example>
+ </programlisting>
+ </example>
+ </section>
- <simpara>
- <literal>convert.quoted-printable-encode</literal> e
- <literal>convert.quoted-printable-decode</literal>
- O uso da versão de decodificação desse filtro é equivalente ao processamento de todos os dados
- da stream pelas funções <function>quoted_printable_decode</function>.
- Não há nenhuma função equivalente a <literal>convert.quoted-printable-encode</literal>.
- <literal>convert.quoted-printable-encode</literal> suporta parâmetros passados como
- um array associativo. Além dos parâmetros suportados por
- <literal>convert.base64-encode</literal>, <literal>convert.quoted-printable-encode</literal>
- também suporta os argumentos booleanos <parameter>binary</parameter> e
- <parameter>force-encode-first</parameter>.
- <literal>convert.base64-decode</literal> suporta apenas o
- parâmetro <parameter>line-break-chars</parameter> como uma dica de tipo
- para retirar do conteúdo codificado.
- </simpara>
- <example>
- <title>
- convert.quoted-printable-encode &
- convert.quoted-printable-decode
- </title>
+ <section xml:id="filters.covert.quoted-printable">
+ <title>convert.quoted-printable-encode e convert.quoted-printable-decode</title>
+ <simpara>
+ O uso da versão de decodificação desse filtro é equivalente ao processamento de todos os dados
+ da stream pelas funções <function>quoted_printable_decode</function>.
+ Não há nenhuma função equivalente a <literal>convert.quoted-printable-encode</literal>.
+ <literal>convert.quoted-printable-encode</literal> suporta parâmetros passados como
+ um array associativo. Além dos parâmetros suportados por
+ <literal>convert.base64-encode</literal>, <literal>convert.quoted-printable-encode</literal>
+ também suporta os argumentos booleanos <parameter>binary</parameter> e
+ <parameter>force-encode-first</parameter>.
+ <literal>convert.base64-decode</literal> suporta apenas o
+ parâmetro <parameter>line-break-chars</parameter> como uma dica de tipo
+ para retirar do conteúdo codificado.
+ </simpara>
+ <example>
+ <title>
+ convert.quoted-printable-encode &
+ convert.quoted-printable-decode
+ </title>
<programlisting role="php">
<![CDATA[
<?php
@@ -226,6 +235,36 @@
</example>
</section>
+ <section xml:id="filters.convert.iconv">
+ <title>convert.iconv.*</title>
+ <simpara>
+ Os filtros <literal>convert.iconv.*</literal> estarão disponíveis se
+ o suporte a <link linkend="book.iconv">iconv</link> estiver habilitado, e se sua utilização é
+ equivalente a processar todos os dados do stream através do <function>iconv</function>.
+ Esses filtros não suportam parâmetros, em vez disso esperam que as codificações
+ de entrada e saída sejam informados no nome do filtro, por exemplo,
+ <literal>convert.iconv.<input-encoding>.<output-encoding></literal> ou
+ <literal>convert.iconv.<input-encoding>/<output-encoding></literal>
+ (ambas notações são equivalentes).
+ </simpara>
+
+ <example>
+ <title>convert.iconv.*</title>
+ <programlisting role="php">
+<![CDATA[
+<?php
+$fp = fopen('php://output', 'w');
+stream_filter_append($fp, 'convert.iconv.utf-16le.utf-8');
+fwrite($fp, "T\0h\0i\0s\0 \0i\0s\0 \0a\0 \0t\0e\0s\0t\0.\0\n\0");
+fclose($fp);
+/* Outputs: This is a test. */
+?>
+]]>
+ </programlisting>
+ </example>
+ </section>
+ </section>
+
<section xml:id="filters.compression">
<title>Filtros de Compressão</title>
@@ -246,48 +285,50 @@
</simpara>
</note>
- <simpara>
- <literal>zlib.deflate</literal> (compressão) e
- <literal>zlib.inflate</literal> (descompressão) são implementações dos
- métodos de compressão descritos no <link xlink:href="&url.rfc;1951">RFC 1951</link>.
- O filtro <literal>deflate</literal> recebe até três parâmetros passados como
- um array associativo.
+ <section xml:id="filters.compression.zlib">
+ <title>zlib.deflate and zlib.inflate</title>
+ <simpara>
+ <literal>zlib.deflate</literal> (compressão) e
+ <literal>zlib.inflate</literal> (descompressão) são implementações dos
+ métodos de compressão descritos no <link xlink:href="&url.rfc;1951">RFC 1951</link>.
+ O filtro <literal>deflate</literal> recebe até três parâmetros passados como
+ um array associativo.
- <parameter>level</parameter> descreve o nível
- de compressão a ser usada (1-9). Números mais altos geralmente resultam em cargas menores com
- o custo de tempo de processamento adicional. Dois níveis especiais de compressão também existem:
- 0 (para nenhuma compressão), e -1 (padrão interno da zlib -- atualmente 6).
+ <parameter>level</parameter> descreve o nível
+ de compressão a ser usada (1-9). Números mais altos geralmente resultam em cargas menores com
+ o custo de tempo de processamento adicional. Dois níveis especiais de compressão também existem:
+ 0 (para nenhuma compressão), e -1 (padrão interno da zlib -- atualmente 6).
- <parameter>window</parameter> é o logaritmo na base 2 do tamanho da janela de loopback de compressão.
- Valores mais altos (até 15 -- 32768 bytes) resultam em melhor compressão ao custo de memória,
- enquanto valores menores (até 9 -- 512 bytes) resultam em pior compressão usando menos memória.
- O tamanho padrão de <parameter>window</parameter> atualmente é <constant>15</constant>.
+ <parameter>window</parameter> é o logaritmo na base 2 do tamanho da janela de loopback de compressão.
+ Valores mais altos (até 15 -- 32768 bytes) resultam em melhor compressão ao custo de memória,
+ enquanto valores menores (até 9 -- 512 bytes) resultam em pior compressão usando menos memória.
+ O tamanho padrão de <parameter>window</parameter> atualmente é <constant>15</constant>.
- <parameter>memory</parameter> é uma escala indicando quanta memória deve ser alocada para trabalhar.
- Valores válidos vão de 1 (alocação mínima) até 9 (alocação máxima). Essa alocação de memória
- afeta apenas a velocidade e não tem impacto sobre o tamanho do conteúdo gerado.
- </simpara>
+ <parameter>memory</parameter> é uma escala indicando quanta memória deve ser alocada para trabalhar.
+ Valores válidos vão de 1 (alocação mínima) até 9 (alocação máxima). Essa alocação de memória
+ afeta apenas a velocidade e não tem impacto sobre o tamanho do conteúdo gerado.
+ </simpara>
- <note>
+ <note>
+ <simpara>
+ Pelo fato do nível de compressão ser o parâmetro mais usado normalmente, ele pode ser passado
+ de maneira alternativa como um simples valor inteiro (ao invés de um elemento de um array).
+ </simpara>
+ </note>
+
<simpara>
- Pelo fato do nível de compressão ser o parâmetro mais usado normalmente, ele pode ser passado
- de maneira alternativa como um simples valor inteiro (ao invés de um elemento de um array).
- </simpara>
- </note>
-
- <simpara>
Filtros de compressão zlib.* estão disponíveis com o PHP a partir da versão <literal>5.1.0</literal> se
o suporte a <link linkend="ref.zlib">zlib</link> estiver ativado. Eles também estão disponíveis como um backport nas versões
<literal>5.0.x</literal> ao instalar o pacote <link xlink:href="&url.pecl.package;zlib_filter">zlib_filter</link>
da <link xlink:href="&url.pecl;">PECL</link>.
- </simpara>
+ </simpara>
- <example>
- <title>
- <literal>zlib.deflate</literal> e
- <literal>zlib.inflate</literal>
- </title>
- <programlisting role="php">
+ <example>
+ <title>
+ <literal>zlib.deflate</literal> e
+ <literal>zlib.inflate</literal>
+ </title>
+ <programlisting role="php">
<![CDATA[
<?php
$params = array('level' => 6, 'window' => 15, 'memory' => 9);
@@ -317,14 +358,14 @@
*/
?>
]]>
- </programlisting>
- </example>
+ </programlisting>
+ </example>
- <example>
- <title>
- <literal>zlib.deflate</literal> simples
- </title>
- <programlisting role="php">
+ <example>
+ <title>
+ <literal>zlib.deflate</literal> simples
+ </title>
+ <programlisting role="php">
<![CDATA[
<?php
$original_text = "Isto é um teste.\nIsto é apenas um teste.\nEsta não é uma string importante.\n";
@@ -346,49 +387,52 @@
*/
?>
]]>
- </programlisting>
- </example>
+ </programlisting>
+ </example>
+ </section>
- <simpara>
- <literal>bzip2.compress</literal> e
- <literal>bzip2.decompress</literal>
- funcionam da mesma maneira que os filtros da zlib descritos acima.
+ <section xml:id="filters.compression.bzip2">
+ <title>bzip2.compress and bzip2.decompress</title>
+ <simpara>
+ <literal>bzip2.compress</literal> e
+ <literal>bzip2.decompress</literal>
+ funcionam da mesma maneira que os filtros da zlib descritos acima.
- O filtro <literal>bzip2.compress</literal> aceita até dois parâmetros passados como
- elementos de um array associativo:
+ O filtro <literal>bzip2.compress</literal> aceita até dois parâmetros passados como
+ elementos de um array associativo:
- <parameter>blocks</parameter> é um valor inteiro
- de 1 até 9 especificando o número de blocos de 100kbyte de memória para alocar para
- o espaço de trabalho.
+ <parameter>blocks</parameter> é um valor inteiro
+ de 1 até 9 especificando o número de blocos de 100kbyte de memória para alocar para
+ o espaço de trabalho.
- <parameter>work</parameter> também é um valor inteiro variando de
- 0 a 250 indicando quanto esforço será realizado usando o método normal de compressão
- antes de desistir e usar um mais lento, mas mais confiável. Alterar esse parâmetro
- afeta apenas a velocidade de compressão. Nem o tamanho da saída comprimida nem o uso de memória
- são alterados por essa configuração. Um fator de trabalho de 0 diz à biblioteca bzip para usar
- o padrão interno.
+ <parameter>work</parameter> também é um valor inteiro variando de
+ 0 a 250 indicando quanto esforço será realizado usando o método normal de compressão
+ antes de desistir e usar um mais lento, mas mais confiável. Alterar esse parâmetro
+ afeta apenas a velocidade de compressão. Nem o tamanho da saída comprimida nem o uso de memória
+ são alterados por essa configuração. Um fator de trabalho de 0 diz à biblioteca bzip para usar
+ o padrão interno.
- O filtro <literal>bzip2.decompress</literal> só aceita um parâmetro,
- que pode ser passado ou como um valor booleano comum ou como o
- elemento <parameter>small</parameter> de um array associativo.
+ O filtro <literal>bzip2.decompress</literal> só aceita um parâmetro,
+ que pode ser passado ou como um valor booleano comum ou como o
+ elemento <parameter>small</parameter> de um array associativo.
- <parameter>small</parameter>, quando configurado para o valor &true;, diz à biblioteca bzip
- para fazer a descompressão usando o mínimo de memória ao custo da velocidade.
- </simpara>
+ <parameter>small</parameter>, quando configurado para o valor &true;, diz à biblioteca bzip
+ para fazer a descompressão usando o mínimo de memória ao custo da velocidade.
+ </simpara>
- <simpara>
+ <simpara>
Filtros de compressão bzip2.* estão disponíveis no PHP a partir da versão <literal>5.1.0</literal> se
o suporte a <link linkend="ref.bzip2">bz2</link> estiver ativado. Eles também estão disponíveis como um backport nas versões
<literal>5.0.x</literal> instalando o pacote <link xlink:href="&url.pecl.package;bz2_filter">bz2_filter</link>
da <link xlink:href="&url.pecl;">PECL</link>.
- </simpara>
+ </simpara>
- <example>
- <title>
- <literal>bzip2.compress</literal> e
- <literal>bzip2.decompress</literal>
- </title>
- <programlisting role="php">
+ <example>
+ <title>
+ <literal>bzip2.compress</literal> e
+ <literal>bzip2.decompress</literal>
+ </title>
+ <programlisting role="php">
<![CDATA[
<?php
$param = array('blocks' => 9, 'work' => 0);
@@ -410,9 +454,10 @@
*/
?>
]]>
- </programlisting>
- </example>
- </section>
+ </programlisting>
+ </example>
+ </section>
+ </section>
<section xml:id="filters.encryption">
<title>Filtros de Criptografia</title>
@@ -425,68 +470,74 @@
Os filtros de criptografia são especialmente úteis para criptografia de arquivo/stream.
</para>
- <simpara>
- Os filtros <literal>mcrypt.*</literal> e <literal>mdecrypt.*</literal>
- fornecem criptografia e descriptografia simétricas usando libmcrypt.
- Ambos os conjuntos de filtros suportam os mesmos algoritmos disponíveis na
- <link linkend="ref.mcrypt">extensão mcrypt</link> na forma de
- <literal>mcrypt.ciphername</literal> onde <parameter>ciphername</parameter>
- é o nome da cifra como seria passado para
- <function>mcrypt_module_open</function>.
- Os cinco parâmetros de filtros a seguir também estão disponíveis:
- </simpara>
+ <section xml:id="filters.encryption.mcrypt">
+ <title>mcrypt.* and mdecrypt.*</title>
+ <para>
+ &warn.deprecated.feature-7-1-0;
+ </para>
- <para>
- <table>
- <title>Parâmetros para os filtros mcrypt</title>
- <tgroup cols="4">
- <thead>
- <row>
- <entry>Parâmetro</entry>
- <entry>Obrigatório?</entry>
- <entry>Valor Padrão</entry>
- <entry>Exemplos de Valores</entry>
- </row>
- </thead>
- <tbody>
- <row>
- <entry>mode</entry>
- <entry>Opcional</entry>
- <entry>cbc</entry>
- <entry>cbc, cfb, ecb, nofb, ofb, stream</entry>
- </row>
- <row>
- <entry>algorithms_dir</entry>
- <entry>Opcional</entry>
- <entry>ini_get('mcrypt.algorithms_dir')</entry>
- <entry>Localização dos módulos de algoritmos</entry>
- </row>
- <row>
- <entry>modes_dir</entry>
- <entry>Opcional</entry>
- <entry>ini_get('mcrypt.modes_dir')</entry>
- <entry>Localização dos módulos de modos</entry>
- </row>
- <row>
- <entry>iv</entry>
- <entry>Obrigatório</entry>
- <entry>N/A</entry>
- <entry>Tipicamente 8, 16 ou 32 bytes de dados binários. Depende da cifra.</entry>
- </row>
- <row>
- <entry>key</entry>
- <entry>Obrigatório</entry>
- <entry>N/A</entry>
- <entry>Tipicamente 8, 16 ou 32 bytes de dados binários. Depende da cifra.</entry>
- </row>
- </tbody>
- </tgroup>
- </table>
- </para>
+ <simpara>
+ Os filtros <literal>mcrypt.*</literal> e <literal>mdecrypt.*</literal>
+ fornecem criptografia e descriptografia simétricas usando libmcrypt.
+ Ambos os conjuntos de filtros suportam os mesmos algoritmos disponíveis na
+ <link linkend="ref.mcrypt">extensão mcrypt</link> na forma de
+ <literal>mcrypt.ciphername</literal> onde <parameter>ciphername</parameter>
+ é o nome da cifra como seria passado para
+ <function>mcrypt_module_open</function>.
+ Os cinco parâmetros de filtros a seguir também estão disponíveis:
+ </simpara>
- <example>
- <title>Criptografar/Descriptografar com Blowfish</title>
- <programlisting role="php">
+ <para>
+ <table>
+ <title>Parâmetros para os filtros mcrypt</title>
+ <tgroup cols="4">
+ <thead>
+ <row>
+ <entry>Parâmetro</entry>
+ <entry>Obrigatório?</entry>
+ <entry>Valor Padrão</entry>
+ <entry>Exemplos de Valores</entry>
+ </row>
+ </thead>
+ <tbody>
+ <row>
+ <entry>mode</entry>
+ <entry>Opcional</entry>
+ <entry>cbc</entry>
+ <entry>cbc, cfb, ecb, nofb, ofb, stream</entry>
+ </row>
+ <row>
+ <entry>algorithms_dir</entry>
+ <entry>Opcional</entry>
+ <entry>ini_get('mcrypt.algorithms_dir')</entry>
+ <entry>Localização dos módulos de algoritmos</entry>
+ </row>
+ <row>
+ <entry>modes_dir</entry>
+ <entry>Opcional</entry>
+ <entry>ini_get('mcrypt.modes_dir')</entry>
+ <entry>Localização dos módulos de modos</entry>
+ </row>
+ <row>
+ <entry>iv</entry>
+ <entry>Obrigatório</entry>
+ <entry>N/A</entry>
+ <entry>Tipicamente 8, 16 ou 32 bytes de dados binários. Depende da cifra.</entry>
+ </row>
+ <row>
+ <entry>key</entry>
+ <entry>Obrigatório</entry>
+ <entry>N/A</entry>
+ <entry>Tipicamente 8, 16 ou 32 bytes de dados binários. Depende da cifra.</entry>
+ </row>
+ </tbody>
+ </tgroup>
+ </table>
+ </para>
+
+ <example>
+ <title>Criptografar/Descriptografar com Blowfish</title>
+ <programlisting role="php">
<![CDATA[
<?php
// assume-se que $key foi gerada anteriormente
@@ -509,11 +560,11 @@
echo $data;
?>
]]>
- </programlisting>
- </example>
- <example>
- <title>Criptografar arquivo usando CBC AES-128 com HMAC SHA256 no PHP 5.5+</title>
- <programlisting role="php">
+ </programlisting>
+ </example>
+ <example>
+ <title>Criptografar arquivo usando CBC AES-128 com HMAC SHA256 no PHP 5.5+</title>
+ <programlisting role="php">
<![CDATA[
<?php
AES_CBC::encryptFile($password, "plaintext.txt", "encrypted.enc");
@@ -521,109 +572,110 @@
class AES_CBC
{
- protected static $KEY_SIZES = array('AES-128'=>16,'AES-192'=>24,'AES-256'=>32);
- protected static function key_size() { return self::$KEY_SIZES['AES-128']; } // padrão AES-128
- public static function encryptFile($password, $input_stream, $aes_filename){
- $iv_size = mcrypt_get_iv_size(MCRYPT_RIJNDAEL_128, MCRYPT_MODE_CBC);
- $fin = fopen($input_stream, "rb");
- $fc = fopen($aes_filename, "wb+");
- if (!empty($fin) && !empty($fc)) {
- fwrite($fc, str_repeat("_", 32) ); // placeholder, HMAC SHA256 será usado aqui mais tarde
- fwrite($fc, $hmac_salt = mcrypt_create_iv($iv_size, MCRYPT_DEV_URANDOM));
- fwrite($fc, $esalt = mcrypt_create_iv($iv_size, MCRYPT_DEV_URANDOM));
- fwrite($fc, $iv = mcrypt_create_iv($iv_size, MCRYPT_DEV_URANDOM));
- $ekey = hash_pbkdf2("sha256", $password, $esalt, $it=1000, self::key_size(), $raw=true);
- $opts = array('mode'=>'cbc', 'iv'=>$iv, 'key'=>$ekey);
- stream_filter_append($fc, 'mcrypt.rijndael-128', STREAM_FILTER_WRITE, $opts);
- $infilesize = 0;
- while (!feof($fin)) {
- $block = fread($fin, 8192);
- $infilesize+=strlen($block);
- fwrite($fc, $block);
+ protected static $KEY_SIZES = array('AES-128'=>16,'AES-192'=>24,'AES-256'=>32);
+ protected static function key_size() { return self::$KEY_SIZES['AES-128']; } // padrão AES-128
+ public static function encryptFile($password, $input_stream, $aes_filename){
+ $iv_size = mcrypt_get_iv_size(MCRYPT_RIJNDAEL_128, MCRYPT_MODE_CBC);
+ $fin = fopen($input_stream, "rb");
+ $fc = fopen($aes_filename, "wb+");
+ if (!empty($fin) && !empty($fc)) {
+ fwrite($fc, str_repeat("_", 32) ); // placeholder, HMAC SHA256 será usado aqui mais tarde
+ fwrite($fc, $hmac_salt = mcrypt_create_iv($iv_size, MCRYPT_DEV_URANDOM));
+ fwrite($fc, $esalt = mcrypt_create_iv($iv_size, MCRYPT_DEV_URANDOM));
+ fwrite($fc, $iv = mcrypt_create_iv($iv_size, MCRYPT_DEV_URANDOM));
+ $ekey = hash_pbkdf2("sha256", $password, $esalt, $it=1000, self::key_size(), $raw=true);
+ $opts = array('mode'=>'cbc', 'iv'=>$iv, 'key'=>$ekey);
+ stream_filter_append($fc, 'mcrypt.rijndael-128', STREAM_FILTER_WRITE, $opts);
+ $infilesize = 0;
+ while (!feof($fin)) {
+ $block = fread($fin, 8192);
+ $infilesize+=strlen($block);
+ fwrite($fc, $block);
+ }
+ $block_size = mcrypt_get_block_size(MCRYPT_RIJNDAEL_128, MCRYPT_MODE_CBC);
+ $padding = $block_size - ($infilesize % $block_size);//$padding is a number from 1-16
+ fwrite($fc, str_repeat(chr($padding), $padding) );//perform PKCS7 padding
+ fclose($fin);
+ fclose($fc);
+ $hmac_raw = self::calculate_hmac_after_32bytes($password, $hmac_salt, $aes_filename);
+ $fc = fopen($aes_filename, "rb+");
+ fwrite($fc, $hmac_raw);//overwrite placeholder
+ fclose($fc);
}
- $block_size = mcrypt_get_block_size(MCRYPT_RIJNDAEL_128, MCRYPT_MODE_CBC);
- $padding = $block_size - ($infilesize % $block_size); // $padding é um número de 1-16
- fwrite($fc, str_repeat(chr($padding), $padding) ); // realiza o padding PKCS7
- fclose($fin);
- fclose($fc);
- $hmac_raw = self::calculate_hmac_after_32bytes($password, $hmac_salt, $aes_filename);
- $fc = fopen($aes_filename, "rb+");
- fwrite($fc, $hmac_raw); // sobrescreve o placeholder
- fclose($fc);
- }
- }
- public static function decryptFile($password, $aes_filename, $out_stream) {
- $iv_size = mcrypt_get_iv_size(MCRYPT_RIJNDAEL_128, MCRYPT_MODE_CBC);
- $hmac_raw = file_get_contents($aes_filename, false, NULL, 0, 32);
- $hmac_salt = file_get_contents($aes_filename, false, NULL, 32, $iv_size);
- $hmac_calc = self::calculate_hmac_after_32bytes($password, $hmac_salt, $aes_filename);
- $fc = fopen($aes_filename, "rb");
- $fout = fopen($out_stream, 'wb');
- if (!empty($fout) && !empty($fc) && self::hash_equals($hmac_raw,$hmac_calc)) {
- fread($fc, 32+$iv_size); // ignora HMAC SHA256 e salt
- $esalt = fread($fc, $iv_size);
- $iv = fread($fc, $iv_size);
- $ekey = hash_pbkdf2("sha256", $password, $esalt, $it=1000, self::key_size(), $raw=true);
- $opts = array('mode'=>'cbc', 'iv'=>$iv, 'key'=>$ekey);
- stream_filter_append($fc, 'mdecrypt.rijndael-128', STREAM_FILTER_READ, $opts);
- while (!feof($fc)) {
- $block = fread($fc, 8192);
- if (feof($fc)) {
- $padding = ord($block[strlen($block) - 1]); // assume padding PKCS7
- $block = substr($block, 0, 0-$padding);
- }
- fwrite($fout, $block);
+ }
+ public static function decryptFile($password, $aes_filename, $out_stream) {
+ $iv_size = mcrypt_get_iv_size(MCRYPT_RIJNDAEL_128, MCRYPT_MODE_CBC);
+ $hmac_raw = file_get_contents($aes_filename, false, NULL, 0, 32);
+ $hmac_salt = file_get_contents($aes_filename, false, NULL, 32, $iv_size);
+ $hmac_calc = self::calculate_hmac_after_32bytes($password, $hmac_salt, $aes_filename);
+ $fc = fopen($aes_filename, "rb");
+ $fout = fopen($out_stream, 'wb');
+ if (!empty($fout) && !empty($fc) && self::hash_equals($hmac_raw,$hmac_calc)) {
+ fread($fc, 32+$iv_size);//skip sha256 hmac and salt
+ $esalt = fread($fc, $iv_size);
+ $iv = fread($fc, $iv_size);
+ $ekey = hash_pbkdf2("sha256", $password, $esalt, $it=1000, self::key_size(), $raw=true);
+ $opts = array('mode'=>'cbc', 'iv'=>$iv, 'key'=>$ekey);
+ stream_filter_append($fc, 'mdecrypt.rijndael-128', STREAM_FILTER_READ, $opts);
+ while (!feof($fc)) {
+ $block = fread($fc, 8192);
+ if (feof($fc)) {
+ $padding = ord($block[strlen($block) - 1]);//assume PKCS7 padding
+ $block = substr($block, 0, 0-$padding);
+ }
+ fwrite($fout, $block);
+ }
+ fclose($fout);
+ fclose($fc);
}
- fclose($fout);
- fclose($fc);
- }
- }
- private static function hash_equals($str1, $str2) {
- if(strlen($str1) == strlen($str2)) {
- $res = $str1 ^ $str2;
- for($ret=0,$i = strlen($res) - 1; $i >= 0; $i--) $ret |= ord($res[$i]);
- return !$ret;
- }
- return false;
- }
- private static function calculate_hmac_after_32bytes($password, $hsalt, $filename) {
- static $init=0;
- $init or $init = stream_filter_register("user-filter.skipfirst32bytes", "FileSkip32Bytes");
- $stream = 'php://filter/read=user-filter.skipfirst32bytes/resource=' . $filename;
- $hkey = hash_pbkdf2("sha256", $password, $hsalt, $iterations=1000, 24, $raw=true);
- return hash_hmac_file('sha256', $stream, $hkey, $raw=true);
- }
+ }
+ private static function hash_equals($str1, $str2) {
+ if(strlen($str1) == strlen($str2)) {
+ $res = $str1 ^ $str2;
+ for($ret=0,$i = strlen($res) - 1; $i >= 0; $i--) $ret |= ord($res[$i]);
+ return !$ret;
+ }
+ return false;
+ }
+ private static function calculate_hmac_after_32bytes($password, $hsalt, $filename) {
+ static $init=0;
+ $init or $init = stream_filter_register("user-filter.skipfirst32bytes", "FileSkip32Bytes");
+ $stream = 'php://filter/read=user-filter.skipfirst32bytes/resource=' . $filename;
+ $hkey = hash_pbkdf2("sha256", $password, $hsalt, $iterations=1000, 24, $raw=true);
+ return hash_hmac_file('sha256', $stream, $hkey, $raw=true);
+ }
}
class FileSkip32Bytes extends php_user_filter
{
- private $skipped=0;
- function filter($in, $out, &$consumed, $closing) {
- while ($bucket = stream_bucket_make_writeable($in)) {
- $outlen = $bucket->datalen;
- if ($this->skipped<32){
- $outlen = min($bucket->datalen,32-$this->skipped);
- $bucket->data = substr($bucket->data, $outlen);
- $bucket->datalen = $bucket->datalen-$outlen;
- $this->skipped+=$outlen;
+ private $skipped=0;
+ function filter($in, $out, &$consumed, $closing) {
+ while ($bucket = stream_bucket_make_writeable($in)) {
+ $outlen = $bucket->datalen;
+ if ($this->skipped<32){
+ $outlen = min($bucket->datalen,32-$this->skipped);
+ $bucket->data = substr($bucket->data, $outlen);
+ $bucket->datalen = $bucket->datalen-$outlen;
+ $this->skipped+=$outlen;
+ }
+ $consumed += $outlen;
+ stream_bucket_append($out, $bucket);
}
- $consumed += $outlen;
- stream_bucket_append($out, $bucket);
- }
- return PSFS_PASS_ON;
- }
+ return PSFS_PASS_ON;
+ }
}
class AES_128_CBC extends AES_CBC {
- protected static function key_size() { return self::$KEY_SIZES['AES-128']; }
+ protected static function key_size() { return self::$KEY_SIZES['AES-128']; }
}
class AES_192_CBC extends AES_CBC {
- protected static function key_size() { return self::$KEY_SIZES['AES-192']; }
+ protected static function key_size() { return self::$KEY_SIZES['AES-192']; }
}
class AES_256_CBC extends AES_CBC {
- protected static function key_size() { return self::$KEY_SIZES['AES-256']; }
+ protected static function key_size() { return self::$KEY_SIZES['AES-256']; }
}
]]>
- </programlisting>
- </example>
+ </programlisting>
+ </example>
+ </section>
</section>
</appendix>