1

I'm trying to decode the following string from base64 without any exit. It always returns nil. I have tried to change NSDataBase64DecodingOptions to IgnoreUnknowCharanters but it doesn't work either. I also tried to remove the padding like this answer says swift base64 decoding returns nil but the length of my string is divisible by 4 so It doesn't works.

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
    }

Hope you can help me. Thanks!!

Community
  • 1
  • 1
Marta Tenés
  • 2,102
  • 1
  • 13
  • 22

3 Answers3

2

Just in case someone is trying to Solve this issue moving from Java to Swift.

This Answer helped me out, you might need to append("==")

Swift 3 base64 decode return nil

You might need to append("==")

truthsayer
  • 397
  • 2
  • 8
  • 22
1

I doubt on string "PY5ehymWfQKExWxPyOImGiQkxNjyuBREmOXtQdePVpuH9PFzizaO+WTuM1sLouTQPz5UO7csloC9GjOFqkq4POmlB9d3mMJGLB2pVCNs8t9EejOcjV4fRHaITkmfMfVbizCnTvHGBwLWXjLc7gwyhu2+S9qw0NXc5jw6EdEk+zuesrdwLgqws0hDqFSoVw57+CnvUmgXwtNfKP4p64mJ9inH/0xAMarCc5N4Wjz/zmlTyd2PoDFUC/iLdZ7csau7X2M="

This works, that string getting encode and decode too

    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

This doesn't work, that decoded string dont get encode

    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

This could be reason, check on https://www.base64decode.org/

enter image description here

Though special characters can't be hold in String.

Hasya
  • 9,792
  • 4
  • 31
  • 46
  • It is suposed that it is an encrypted string – Marta Tenés Aug 02 '16 at 11:41
  • That string is not encrypted, when we decrypt on https://www.base64decode.org/ , it should give meaning full message, but it is purely giving exceptional characters. i doubt on encrypt code. Please make sure once. – Hasya Aug 02 '16 at 11:50
  • I receive this string from a external API. You need a key to decrypt it in AES but anyway I will contact to them...no way to decode it. – Marta Tenés Aug 02 '16 at 13:27
  • Ohh, i guess you were doing encryption for same. No way to decode it or they have to give a key or logic to decode this string. You can accept answer if helped. – Hasya Aug 02 '16 at 13:32
0

maybe you can follow this

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

and use following method to decode(i guess your string is encoded by aes cbc and base64, if you want to decode this string, you must know the encode key and iv)

"PY5ehymWfQKExWxPyOImGiQkxNjyuBREmOXtQdePVpuH9PFzizaO+WTuM1sLouTQPz5UO7csloC9GjOFqkq4POmlB9d3mMJGLB2pVCNs8t9EejOcjV4fRHaITkmfMfVbizCnTvHGBwLWXjLc7gwyhu2+S9qw0NXc5jw6EdEk+zuesrdwLgqws0hDqFSoVw57+CnvUmgXwtNfKP4p64mJ9inH/0xAMarCc5N4Wjz/zmlTyd2PoDFUC/iLdZ7csau7X2M=".decryptBase64ToString(cipher)
WilliamChik
  • 141
  • 2
  • 7