2016-08-02 53 views
0

Ich versuche, die folgende Zeichenfolge von Base64 ohne jeden Ausgang zu dekodieren. Es gibt immer Null zurück. Ich habe versucht, NSDataBase64DecodingOptions in IgnoreUnknowCharanters zu ändern, aber es funktioniert auch nicht. Ich habe auch versucht, die Polsterung zu entfernen, wie diese Antwort sagt swift base64 decoding returns nil, aber die Länge meiner Zeichenfolge ist durch 4 teilbar, so dass es nicht funktioniert.Swift 2 Decode base64 immer zurück null

String

PY5ehymWfQKExWxPyOImGiQkxNjyuBREmOXtQdePVpuH9PFzizaO+WTuM1sLouTQPz5UO7csloC9GjOFqkq4POmlB9d3mMJGLB2pVCNs8t9EejOcjV4fRHaITkmfMfVbizCnTvHGBwLWXjLc7gwyhu2+S9qw0NXc5jw6EdEk+zuesrdwLgqws0hDqFSoVw57+CnvUmgXwtNfKP4p64mJ9inH/0xAMarCc5N4Wjz/zmlTyd2PoDFUC/iLdZ7csau7X2M= 

Option 1

if let decodedData = NSData(base64EncodedString: base64String, options: NSDataBase64DecodingOptions.IgnoreUnknownCharacters), 
     let decodedString = NSString(data: decodedData, encoding: NSUTF8StringEncoding) { 
     print(decodedString) // foo 
    } 

Option 2

if let decodedData = NSData(base64EncodedString: pnpData, options: NSDataBase64DecodingOptions.init(rawValue: 0)), 
     let decodedString = NSString(data: decodedData, encoding: NSUTF8StringEncoding) { 
     print(decodedString) // foo 
    } 

Hoffe ihr könnt mir helfen. Vielen Dank!!

+0

Welches Bit gibt nil, die Daten oder die Zeichenfolge aus den Daten zurück? Woher kommt deine Base64-Saite? – Wain

+0

Ich gehe davon aus, dass die Base64-Decodierung funktioniert, aber die decodierten Daten stellen keine gültige UTF-8-Sequenz dar, so dass 'NSString (data: decodedData ...)' fehlschlägt. Welches Ergebnis erwartest du? –

+0

@MartinR Es steht fest, dass es sich um eine verschlüsselte Zeichenfolge handelt, also muss ich sie nach der Dekodierung mit AES entschlüsseln. –

Antwort

0

Ich bezweifle auf string "PY5ehymWfQKExWxPyOImGiQkxNjyuBREmOXtQdePVpuH9PFzizaO + WTuM1sLouTQPz5UO7csloC9GjOFqkq4POmlB9d3mMJGLB2pVCNs8t9EejOcjV4fRHaITkmfMfVbizCnTvHGBwLWXjLc7gwyhu2 + S9qw0NXc5jw6EdEk + zuesrdwLgqws0hDqFSoVw57 + CnvUmgXwtNfKP4p64mJ9inH/0xAMarCc5N4Wjz/zmlTyd2PoDFUC/iLdZ7csau7X2M ="

Dies funktioniert, dass Zeichenfolge immer kodieren und dekodieren zu

let utf8str = "PY5ehymWfQKExWxPyOImGiQkxNjyuBREmOXtQdePVpuH9PFzizaO+WTuM1sLouTQPz5UO7csloC9GjOFqkq4POmlB9d3mMJGLB2pVCNs8t9EejOcjV4fRHaITkmfMfVbizCnTvHGBwLWXjLc7gwyhu2+S9qw0NXc5jw6EdEk+zuesrdwLgqws0hDqFSoVw57+CnvUmgXwtNfKP4p64mJ9inH/0xAMarCc5N4Wjz/zmlTyd2PoDFUC/iLdZ7csau7X2M=".dataUsingEncoding(NSUTF8StringEncoding) 
    let base64Encoded = utf8str?.base64EncodedStringWithOptions(NSDataBase64EncodingOptions(rawValue: 0)) 
    let encodedString : String = base64Encoded! 
    print(encodedString) // my encoded data 

    let decodedData = NSData(base64EncodedString: encodedString, options:NSDataBase64DecodingOptions(rawValue: 0)) 
    let decodedString : String = String(data: decodedData!, encoding: NSUTF8StringEncoding)! 
    print(decodedString) // my plain data 

Dies funktioniert nicht, die decodierte Zeichenfolge nicht codieren

let decodedData = NSData(base64EncodedString: "PY5ehymWfQKExWxPyOImGiQkxNjyuBREmOXtQdePVpuH9PFzizaO+WTuM1sLouTQPz5UO7csloC9GjOFqkq4POmlB9d3mMJGLB2pVCNs8t9EejOcjV4fRHaITkmfMfVbizCnTvHGBwLWXjLc7gwyhu2+S9qw0NXc5jw6EdEk+zuesrdwLgqws0hDqFSoVw57+CnvUmgXwtNfKP4p64mJ9inH/0xAMarCc5N4Wjz/zmlTyd2PoDFUC/iLdZ7csau7X2M=", options:NSDataBase64DecodingOptions(rawValue: 0)) 
    let decodedString : String = String(data: decodedData!, encoding: NSUTF8StringEncoding)! 
    print(decodedString) // my plain data 

Dieser Grund sein könnte, überprüfen Sie auf https://www.base64decode.org/

enter image description here

Obwohl Sonderzeichen in String halten kann nicht sein.

+0

Es liegt vor, dass es eine verschlüsselte Zeichenfolge ist –

+0

Diese Zeichenfolge ist nicht verschlüsselt, wenn wir entschlüsseln auf https://www.base64decode.org/, sollte es bedeuten, vollständige Nachricht, aber es ist rein geben außergewöhnliche Charaktere. Ich bezweifle den Verschlüsselungscode. Bitte vergewissern Sie sich einmal. – Hasya

+0

Ich erhalte diese Zeichenfolge von einer externen API. Du brauchst einen Schlüssel, um es in AES zu entschlüsseln, aber trotzdem werde ich mich mit ihnen in Verbindung setzen ... keine Möglichkeit, es zu entschlüsseln. –

0

vielleicht können Sie diese

https://github.com/krzyzanowskim/CryptoSwift#data-padding

und Verwendung folgenden Verfahren folgen zu dekodieren (ich denke, die Zeichenfolge von aes cbc und Base64 codiert ist, wenn Sie diese Zeichenfolge entschlüsseln möchten, können Sie das wissen müssen Schlüssel codieren und iv)

"PY5ehymWfQKExWxPyOImGiQkxNjyuBREmOXtQdePVpuH9PFzizaO+WTuM1sLouTQPz5UO7csloC9GjOFqkq4POmlB9d3mMJGLB2pVCNs8t9EejOcjV4fRHaITkmfMfVbizCnTvHGBwLWXjLc7gwyhu2+S9qw0NXc5jw6EdEk+zuesrdwLgqws0hDqFSoVw57+CnvUmgXwtNfKP4p64mJ9inH/0xAMarCc5N4Wjz/zmlTyd2PoDFUC/iLdZ7csau7X2M=".decryptBase64ToString(cipher)