2016-08-02 182 views
0

我試圖從base64解碼下面的字符串沒有任何退出。它總是返回零。我試圖將NSDataBase64DecodingOptions更改爲IgnoreUnknowCharanters,但它也不起作用。我也嘗試刪除填充像這個答案說swift base64 decoding returns nil但我的字符串的長度可以被4整除,所以它不起作用。Swift 2解碼base64總是返回零

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

選項1

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

選項2

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

希望你能幫助我。謝謝!!

+0

哪位返回nil,數據或從數據創建字符串?你的base64字符串是從哪裏來的? – Wain

+0

我假設Base64解碼工作,但解碼後的數據並不代表有效的UTF-8序列,所以'NSString(data:decodedData ...)'失敗。你期望什麼結果? –

+0

@MartinR它是一個加密的字符串,所以解碼後我必須使用AES來解密它。 –

回答

0

我的字符串 「PY5ehymWfQKExWxPyOImGiQkxNjyuBREmOXtQdePVpuH9PFzizaO + WTuM1sLouTQPz5UO7csloC9GjOFqkq4POmlB9d3mMJGLB2pVCNs8t9EejOcjV4fRHaITkmfMfVbizCnTvHGBwLWXjLc7gwyhu2 + S9qw0NXc5jw6EdEk + zuesrdwLgqws0hDqFSoVw57 + CnvUmgXwtNfKP4p64mJ9inH/0xAMarCc5N4Wjz/zmlTyd2PoDFUC/iLdZ7csau7X2M =」

這個工程,該字符串獲得編碼和解碼太

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 

懷疑這不起作用,解碼的字符串不會得到編碼

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 

這可能是原因,檢查https://www.base64decode.org/

enter image description here

雖然特殊字符不能在字符串持有。

+0

它暗示它是一個加密字符串 –

+0

該字符串未加密,當我們在https://www.base64decode.org/上解密時,它應該給出意思完整的消息,但它是純粹給予特殊的人物。我懷疑加密代碼。請確保一次。 – Hasya

+0

我從外部API收到此字符串。你需要一個密鑰來解密AES,但無論如何我會聯繫他們......沒辦法解碼它。 –

0

也許你可以按照這個

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

和使用下面的方法來解碼(我猜你的字符串是由AES CBC和base64編碼,如果你想這個字符串解碼,你必須知道編碼鍵和四)

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