<?xml version="1.0" encoding="UTF-8"?>
<!-- EN-Revision: 14978 -->
<!-- Reviewed: no -->
<sect2 id="zend.filter.set.decrypt">
    <title>Decrypt</title>
    <para>
        Dieser Filter verschlüsselt beliebige Strings mit den angegebenen Einstellungen. Hierfür verwendet er
        Adapter. Aktuell gibt es Adapter für die <code>Mcrypt</code> und <code>OpenSSL</code> Erweiterungen
        von php.
    </para>

    <para>
        Für Details darüber wie man Inhalte verschlüsselt siehe den <code>Encrypt</code> Filter. Da die
        Grundlegenden Dinge beim <code>Encrypt</code> Filter behandelt werden, beschreiben wir hier nur
        mehr die zusätzlichen Methoden und Änderungen für die Entschlüsselung.
    </para>

    <sect3 id="zend.filter.set.decrypt.mcrypt">
        <title>Entschlüsselung mit Mcrypt</title>
        <para>
            Für die Entschlüsselung von Inhalten die vorher mit <code>Mcrypt</code> verschlüsselt wurden
            muß man die Optionen wissen mit denen die Verschlüsselung aufgerufen wurde.
        </para>

        <para>
            Es gibt einen wichtigen Unterschied. Wenn man bei der Verschlüsselung keinen Vektor angegeben hat,
            muß man Ihn nach der Verschlüsselung des Inhalts holen indem die <code>getVector()</code> Methode
            am Verschlüsselungs-Filter aufgerufen wird. Ohne den richtigen Vektor ist man nicht in der Lage
            den Inhalt zu entschlüsseln.
        </para>

        <para>
            Sobald man alle Optionen angegeben hat ist die Entschlüsselung so einfach wie die Verschlüsselung.
        </para>

        <programlisting role="php"><![CDATA[
// Verwende die Standardmäßigen Blowfish Einstellungen
$filter = new Zend_Filter_Decrypt('myencryptionkey');

// Setze den Vektor mit dem der Inhalt verschlüsselt wurde
$filter->setVector('myvector');

$decrypted = $filter->filter('encoded_text_normally_unreadable');
print $decrypted;
]]>
        </programlisting>

        <note>
            <para>
                Man sollte beachten das man eine Ausnahme erhält wenn die Mcrypt Erweiterung in der eigenen
                Umgebung nicht vorhanden ist.
            </para>
        </note>

        <note>
            <para>
                Man sollte ausserdem beachten das alle Einstellungen geprüft werden wenn man die Instanz
                erstellt oder wenn man setEncryption() aufruft. Wenn Mcrypt ein Problem mit den Einstellungen
                erkennt wird eine Ausnahme geworfen.
            </para>
        </note>
    </sect3>

    <sect3 id="zend.filter.set.decrypt.openssl">
        <title>Entschlüsselung mit OpenSSL</title>
        <para>
            Entschlüsselung mit <code>OpenSSL</code> ist so einfach die Verschlüsseln. Aber man benötigt alle
            Daten von der Person die den Inhalt verschlüsselt hat.
        </para>

        <para>
            Für die Entschlüsselung mit <code>OpenSSL</code> benötigt man:
        </para>

        <itemizedlist>
            <listitem>
                <para>
                    <emphasis>private</emphasis>: Den eigenen privaten Schlüssel der für die Entschlüsselung
                    des Inhalts verwendet wird. Der private Schlüssel kann ein Dateiname mit einem Pfad zur
                    Schlüsseldatei sein, oder einfach der Inhalt der Schlüsseldatei selbst.
                </para>
            </listitem>

            <listitem>
                <para>
                    <emphasis>envelope</emphasis>: Der verschlüsselte Umschlagschlüssel vom Benutzer der den
                    Inhalt verschlüsselt hat. Man kann entweder den Pfad mit dem Dateinamen zur
                    Schlüsseldatei angeben, oder den Inhalt der Schlüsseldatei selbst.
                </para>
            </listitem>
        </itemizedlist>

        <programlisting role="php"><![CDATA[
// Verwende openssl und gib einen privaten Schlüssel an
$filter = new Zend_Filter_Decrypt(array(
    'adapter' => 'openssl',
    'private' => '/path/to/mykey/private.pem'
));

// natürlich kann man den Umschlagschlüssel auch bei der Instanziierung angeben
$filter->setEnvelopeKey(array(
    '/key/from/encoder/first.pem',
    '/key/from/encoder/second.pem'
));
]]>
        </programlisting>

        <note>
            <para>
                Beachte das der <code>OpenSSL</code> Adapter nicht funktionieren wird wenn man keine
                gültigen Schlüssel angibt.
            </para>
        </note>

        <para>
            Optional könnte es notwendig sein die Passphrase für die Entschlüsselung der Schlüssel selbst
            anzugeben indem die <code>setPassphrase()</code> Methode verwendet wird.
        </para>

        <programlisting role="php"><![CDATA[
// Verwende openssl und gib einen privaten Schlüssel an
$filter = new Zend_Filter_Decrypt(array(
    'adapter' => 'openssl',
    'private' => '/path/to/mykey/private.pem'
));

// natürlich kann man den Umschlagschlüssel auch bei der Instanziierung angeben
$filter->setEnvelopeKey(array(
    '/key/from/encoder/first.pem',
    '/key/from/encoder/second.pem'
));
$filter->setPassphrase('mypassphrase');
]]>
        </programlisting>

        <para>
            Zum Schluß kann der Inhalt entschlüsselt werden. Unser komplettes Beispiel für den vorher
            verschlüsselten Inhat sieht nun wie folgt aus.
        </para>

        <programlisting role="php"><![CDATA[
// Verwende openssl und gib einen privaten Schlüssel an
$filter = new Zend_Filter_Decrypt(array(
    'adapter' => 'openssl',
    'private' => '/path/to/mykey/private.pem'
));

// natürlich kann man den Umschlagschlüssel auch bei der Instanziierung angeben
$filter->setEnvelopeKey(array(
    '/key/from/encoder/first.pem',
    '/key/from/encoder/second.pem'
));
$filter->setPassphrase('mypassphrase');

$decrypted = $filter->filter('encoded_text_normally_unreadable');
print $decrypted;
]]>
        </programlisting>
    </sect3>
</sect2>
<!--
vim:se ts=4 sw=4 et:
-->