Kategorien:

Zeichenfolgen- und Binärfunktionen (Verschlüsseln/Entschlüsseln)

BASE64_DECODE_BINARY

Decodiert eine Base64-codierte Zeichenfolge in einen Binärwert.

Siehe auch:

TRY_BASE64_DECODE_BINARY

BASE64_DECODE_STRING, BASE64_ENCODE

Syntax

BASE64_DECODE_BINARY( <input> [ , <alphabet> ] )
Copy

Argumente

Benötigt:

input

Ein Base64-codierter Zeichenfolgenausdruck.

Optional:

alphabet

Eine Zeichenfolge, die aus bis zu drei ASCII-Zeichen besteht:

  • Die ersten beiden Zeichen in der Zeichenfolge geben die letzten beiden Zeichen (Indizes 62 und 63) im Alphabet an, die zur Codierung der Eingabe verwendet werden:

    • A bis Z (Indizes 0-25)

    • a bis z (Indizes 26-51)

    • 0 bis 9 (Indizes 52-61)

    • + und / (Indizes 62, 63)

    Standardwerte: + und /

  • Das dritte Zeichen in der Zeichenfolge gibt das Zeichen an, das zum Auffüllen verwendet wird.

    Standard: =

Rückgabewerte

Dies gibt einen BINARY-Wert zurück. Der Wert kann beispielsweise in eine Spalte vom Typ BINARY eingefügt werden.

Nutzungshinweise

  • Die Zeichen in der Zeichenfolge alphabet werden positionsbezogen analysiert. Um andere Zeichen an der zweiten oder dritten Position der Zeichenfolge anzugeben, müssen Sie alle vorangehenden Zeichen explizit angeben, auch wenn Sie die Standardwerte verwenden möchten.

    Beispiel:

    • +$ gibt den Standardwert (+) für Index 62 und ein anderes Zeichen ($) für Index 63 an. Es wird explizit kein Zeichen zum Auffüllen angegeben, sodass das Standardzeichen (=) verwendet wird.

    • +/% gibt die Standardwerte (+ und /) für Indizes 62 und 63 an und legt ein anderes Zeichen (%) zum Auffüllen fest.

  • Die Zeichenfolge in alphabet, die zur Decodierung des input-Werts verwendet wird, muss mit der Zeichenfolge übereinstimmen, die ursprünglich zur Codierung des input-Werts verwendet wurde.

Weitere Informationen zum base64-Format finden Sie unter base64.

Beispiele

In diesem Beispiel werden Daten von Zeichenfolgen- in Binärwerte konvertiert und dann von einem Binärwert in einen BASE64-Zeichenfolgenwert codiert. Danach wird der BASE64-String zurück in einen Binärwert decodiert und dann der Binärwert zurück in eine Zeichenfolge konvertiert.

Erstellen Sie eine Tabelle und Daten. Dazu gehört das Konvertieren einer Zeichenfolge in einen Binärwert und das Konvertieren dieses Binärwerts in eine BASE64-Zeichenfolge:

CREATE OR REPLACE TABLE binary_table (v VARCHAR, b BINARY, b64_string VARCHAR);
INSERT INTO binary_table (v) VALUES ('HELP');
UPDATE binary_table SET b = TO_BINARY(v, 'UTF-8');
UPDATE binary_table SET b64_string = BASE64_ENCODE(b);
Copy

Zeigen Sie nun die ursprüngliche Zeichenfolge, die binäre Form der Zeichenfolge (die tatsächlich als Hexadezimalzahl angezeigt wird) und dann die BASE64-Form des Binärwerts an:

-- Note that the binary data in column b is displayed in hexadecimal
--   format to make it human-readable.
SELECT v, b, b64_string FROM binary_table;
+------+----------+------------+
| V    | B        | B64_STRING |
|------+----------+------------|
| HELP | 48454C50 | SEVMUA==   |
+------+----------+------------+
Copy

Rufen Sie nun die Daten ab, und decodieren Sie diese wieder in ihre ursprüngliche Form. Beachten Sie erneut, dass die reinen Binärwerte in der 2. und 4. Spalte als Hexadezimalwerte und nicht als interne Binärform angezeigt werden:

SELECT v, b, b64_string, 
        BASE64_DECODE_BINARY(b64_string) AS FROM_BASE64_BACK_TO_BINARY,
        TO_VARCHAR(BASE64_DECODE_BINARY(b64_string), 'UTF-8') AS BACK_TO_STRING
    FROM binary_table;
+------+----------+------------+----------------------------+----------------+
| V    | B        | B64_STRING | FROM_BASE64_BACK_TO_BINARY | BACK_TO_STRING |
|------+----------+------------+----------------------------+----------------|
| HELP | 48454C50 | SEVMUA==   | 48454C50                   | HELP           |
+------+----------+------------+----------------------------+----------------+
Copy

Das nächste Beispiel ähnelt dem vorherigen Beispiel, gibt jedoch den Parameter alphabet an, um anzuzeigen, dass „$“ das Codierungszeichen für Index 62 in der BASE64-Codierung sein sollte. Um ausreichend diverse Daten zu haben, um den Index 62 zu benötigen, enthält die Zeichenfolge eine größere Anzahl unterschiedlicher Zeichen.

Erstellen Sie eine Tabelle und Daten. Dazu gehört das Konvertieren einer Zeichenfolge in einen Binärwert und das Konvertieren dieses Binärwerts in eine BASE64-Zeichenfolge:

SET MY_STRING = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ!@#$%^&*()abcdefghijklmnopqrstuvwzyz1234567890[]{};:,./<>?-=~';
CREATE OR REPLACE TABLE binary_table (v VARCHAR, b BINARY, b64_string VARCHAR);
INSERT INTO binary_table (v) VALUES ($MY_STRING);
UPDATE binary_table SET b = TO_BINARY(v, 'UTF-8');
UPDATE binary_table SET b64_string = BASE64_ENCODE(b, 0, '$');
Copy

Rufen Sie nun die Daten ab, und decodieren Sie diese wieder in ihre ursprüngliche Form. Da diese Ausgabespalten so breit sind, werden in diesem Beispiel fünf separate SELECT-Anweisungen anstelle von einer ausgeführt. Beachten Sie erneut, dass die reinen Binärwerte als Hexadezimalwerte und nicht als interne Binärform angezeigt werden. Beachten Sie auch das Dollarzeichen ($) in der BASE64-Zeichenfolge (die dritte Ausgabe unten):

SELECT v
    FROM binary_table;
+-----------------------------------------------------------------------------------------+
| V                                                                                       |
|-----------------------------------------------------------------------------------------|
| ABCDEFGHIJKLMNOPQRSTUVWXYZ!@#$%^&*()abcdefghijklmnopqrstuvwzyz1234567890[]{};:,./<>?-=~ |
+-----------------------------------------------------------------------------------------+
SELECT b
    FROM binary_table;
+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| B                                                                                                                                                                              |
|--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| 4142434445464748494A4B4C4D4E4F505152535455565758595A21402324255E262A28296162636465666768696A6B6C6D6E6F70717273747576777A797A313233343536373839305B5D7B7D3B3A2C2E2F3C3E3F2D3D7E |
+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
SELECT b64_string
    FROM binary_table;
+----------------------------------------------------------------------------------------------------------------------+
| B64_STRING                                                                                                           |
|----------------------------------------------------------------------------------------------------------------------|
| QUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVohQCMkJV4mKigpYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd6eXoxMjM0NTY3ODkwW117fTs6LC4vPD4/LT1$ |
+----------------------------------------------------------------------------------------------------------------------+
SELECT BASE64_DECODE_BINARY(b64_string, '$') AS FROM_BASE64_BACK_TO_BINARY
    FROM binary_table;
+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| FROM_BASE64_BACK_TO_BINARY                                                                                                                                                     |
|--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| 4142434445464748494A4B4C4D4E4F505152535455565758595A21402324255E262A28296162636465666768696A6B6C6D6E6F70717273747576777A797A313233343536373839305B5D7B7D3B3A2C2E2F3C3E3F2D3D7E |
+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
SELECT TO_VARCHAR(BASE64_DECODE_BINARY(b64_string, '$'), 'UTF-8') AS BACK_TO_STRING
    FROM binary_table;
+-----------------------------------------------------------------------------------------+
| BACK_TO_STRING                                                                          |
|-----------------------------------------------------------------------------------------|
| ABCDEFGHIJKLMNOPQRSTUVWXYZ!@#$%^&*()abcdefghijklmnopqrstuvwzyz1234567890[]{};:,./<>?-=~ |
+-----------------------------------------------------------------------------------------+
Copy