2017-02-23 8 views
2

Hier wird String verschlüsselt Base64 ->Entschlüsseln von Base64-Format (Swift)

(ew0KICAiTmV3c0dyYXBoIjogWw0KICAgIHsNCiAgICAgICJEYXRlIjogIjA0LUZlYiIsDQogICAgICAiTmV3c1Njb3JlIjogNTAuMCwNCiAgICAgICJUYWJsZU5hbWUiOiAiTmV3c0dyYXBoIg0KICAgIH0sDQogICAge) 

und hier ist die Erweiterung Methode, um die Zeichenfolge zu entschlüsseln

extension String 
{ 
    func fromBase64() -> String 
    { 
     let data = NSData.init(base64Encoded: self, options: []) ?? NSData() 
     return String(data: data as Data, encoding: String.Encoding.utf8) ?? "" 
    } 
} 

Es gibt keinen Ausgang in meiner Textansicht , aber Sie erhalten entschlüsselte Ausgabe für die gleiche Zeichenfolge auf ->https://www.base64decode.org

Aber wenn ich Teilzeichenfolge aus der verschlüsselten Zeichenfolge ->

ew0KICAiTmV3c0dyYXBoIjogWw0KICAgIHsNCiAgICAgICJEYXRlIjogIjA0LUZlYiIsDQogICAgICAiTmV3c1Njb3JlIjogNTAuMCwNCiAgICAgICJUYWJsZU5hbWUiOiAiTmV3c0dyYXBoIg0KICAgIH0sDQog 

dann gibt mein Code entschlüsselte Zeichenfolge zurück. Was ist das Problem? kann man bitte

+2

'(' und ')' sind keine gültigen Base64-Zeichen – Hamish

+1

Es ist auch nicht notwendig, 'NSData's Initialisierer zu verwenden, da Sie gerade in' Data' konvertieren - benutzen Sie einfach 'Data's Initialisierer. Außerdem müssen Sie den Parameter 'options:' nicht angeben, wenn Sie keine Optionen übergeben möchten. Sie können auch einfach 'encoding: .utf8' in' String's Initialisierer sagen. – Hamish

+3

Die Anzahl der Zeichen in einer gültigen Base64-Zeichenfolge muss ein Vielfaches von 4 sein, aber die erste Zeichenfolge (mit dem Entfernen von umschließenden Klammern) hat 165 Zeichen, deshalb kann NSData.init (base64Encoded: options:) 'sie nicht dekodieren. Siehe [RFC-4648] (https://tools.ietf.org/html/rfc4648). – OOPer

Antwort

1
  1. Base64 ist keine Verschlüsselung, es ist eine Codierung.
  2. Die Länge ist falsch, wenn die umschließende Klammer ignoriert wird, Base64-Codierung muss ein Vielfaches von 4 Zeichen sein.

Beispiel:

das letzte Zeichen löschen gültige Länge zu erstellen.

Entschlüsseln Sie zuerst die Base64-Zeichenfolge zu Data und dann zu aUTF-8-Zeichenfolge.

let base64 = "ew0KICAiTmV3c0dyYXBoIjogWw0KICAgIHsNCiAgICAgICJEYXRlIjogIjA0LUZlYiIsDQogICAgICAiTmV3c1Njb3JlIjogNTAuMCwNCiAgICAgICJUYWJsZU5hbWUiOiAiTmV3c0dyYXBoIg0KICAgIH0sDQogICAg" 
let decodedData = Data(base64Encoded: base64)! 
let decodedString = String(data: decodedData, encoding: .utf8) 
print(decodedString!) 

Ergebnis:

 
{ 
    "NewsGraph": [ 
    { 
     "Date": "04-Feb", 
     "NewsScore": 50.0, 
     "TableName": "NewsGraph" 
    }, 

Es scheint, dass Base64-String in der Frage unvollständig und wird abgeschnitten.

+0

Danke Zaph. Ich habe meine Antwort bekommen. –

Verwandte Themen