2016-08-02 9 views
0

私はbase64から次の文字列を終了せずにデコードしようとしています。常にnilを返します。 NSDataBase64DecodingOptionsをIgnoreUnknowCharantersに変更しようとしましたが、どちらも機能しません。私もこの答えのように詰め物を削除しようとしたswift base64 decoding returns nilしかし、私の文字列の長さは4で割り切れるので、それは動作しません。Swift 2デコードbase64は常にnilを返します

文字列

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でエンコードされていると思いますが、この文字列をデコードする場合、あなたは知っている必要がありますエンコードキーとiv)

"PY5ehymWfQKExWxPyOImGiQkxNjyuBREmOXtQdePVpuH9PFzizaO+WTuM1sLouTQPz5UO7csloC9GjOFqkq4POmlB9d3mMJGLB2pVCNs8t9EejOcjV4fRHaITkmfMfVbizCnTvHGBwLWXjLc7gwyhu2+S9qw0NXc5jw6EdEk+zuesrdwLgqws0hDqFSoVw57+CnvUmgXwtNfKP4p64mJ9inH/0xAMarCc5N4Wjz/zmlTyd2PoDFUC/iLdZ7csau7X2M=".decryptBase64ToString(cipher) 
関連する問題