How can I encode a string in Base64 in Swift?

I want to convert a string to Base64. I found the answers in several places, but in Swift this no longer works. I am using Xcode 6.2. I believe the answer may be work in previous versions of Xcode, not Xcode 6.2.

Can someone please tell me to do this in Xcode 6.2?

The answer I found was like this, but it does not work in my version of Xcode:

var str = "iOS Developer Tips encoded in Base64" println("Original: \(str)") // UTF 8 str from original // NSData! type returned (optional) let utf8str = str.dataUsingEncoding(NSUTF8StringEncoding) // Base64 encode UTF 8 string // fromRaw(0) is equivalent to objc 'base64EncodedStringWithOptions:0' // Notice the unwrapping given the NSData! optional // NSString! returned (optional) let base64Encoded = utf8str.base64EncodedStringWithOptions(NSDataBase64EncodingOptions.fromRaw(0)!) println("Encoded: \(base64Encoded)") // Base64 Decode (go back the other way) // Notice the unwrapping given the NSString! optional // NSData returned let data = NSData(base64EncodedString: base64Encoded, options: NSDataBase64DecodingOptions.fromRaw(0)!) // Convert back to a string let base64Decoded = NSString(data: data, encoding: NSUTF8StringEncoding) println("Decoded: \(base64Decoded)") 

link: http://iosdevelopertips.com/swift-code/base64-encode-decode-swift.html

+86
base64 swift
Mar 31 '15 at 9:27
source share
14 answers

I don't have 6.2 installed, but I don't think 6.3 is any different in this respect:

dataUsingEncoding returns an optional parameter, so you need to expand this.

NSDataBase64EncodingOptions.fromRaw been replaced by NSDataBase64EncodingOptions(rawValue:) . It is not surprising that this is not a bad initializer, so you do not need to deploy it.

But since NSData(base64EncodedString:) is a failover initializer, you need to deploy this.

Btw, all of these changes were suggested by Xcode migrator (click on the error message in the gutter and suggest a “fix”).

The final code rewritten to avoid a forced roll is as follows:

 import Foundation let str = "iOS Developer Tips encoded in Base64" println("Original: \(str)") let utf8str = str.dataUsingEncoding(NSUTF8StringEncoding) if let base64Encoded = utf8str?.base64EncodedStringWithOptions(NSDataBase64EncodingOptions(rawValue: 0)) { println("Encoded: \(base64Encoded)") if let base64Decoded = NSData(base64EncodedString: base64Encoded, options: NSDataBase64DecodingOptions(rawValue: 0)) .map({ NSString(data: $0, encoding: NSUTF8StringEncoding) }) { // Convert back to a string println("Decoded: \(base64Decoded)") } } 

(if you use Swift 1.2, you can use multiple if-let instead of a map)

+57
Mar 31 '15 at 10:06
source share

swift

 import UIKit extension String { func fromBase64() -> String? { guard let data = Data(base64Encoded: self) else { return nil } return String(data: data, encoding: .utf8) } func toBase64() -> String { return Data(self.utf8).base64EncodedString() } } 
+146
Feb 12 '16 at 10:50
source share

You can just do a simple extension, for example:

 import UIKit // MARK: - Mixed string utils and helpers extension String { /** Encode a String to Base64 :returns: */ func toBase64()->String{ let data = self.dataUsingEncoding(NSUTF8StringEncoding) return data!.base64EncodedStringWithOptions(NSDataBase64EncodingOptions(rawValue: 0)) } } 

iOS 7 and up

+20
Sep 10 '15 at 21:43
source share

Swift 4.0.3

 import UIKit extension String { func fromBase64() -> String? { guard let data = Data(base64Encoded: self, options: Data.Base64DecodingOptions(rawValue: 0)) else { return nil } return String(data: data as Data, encoding: String.Encoding.utf8) } func toBase64() -> String? { guard let data = self.data(using: String.Encoding.utf8) else { return nil } return data.base64EncodedString(options: Data.Base64EncodingOptions(rawValue: 0)) } } 
+20
Dec 07 '17 at 11:12
source share

After thorough research, I found a solution

Encoding

  let plainData = (plainString as NSString).dataUsingEncoding(NSUTF8StringEncoding) let base64String =plainData.base64EncodedStringWithOptions(NSDataBase64EncodingOptions.fromRaw(0)!) println(base64String) // bXkgcGxhbmkgdGV4dA== 

Decoding

  let decodedData = NSData(base64EncodedString: base64String, options:NSDataBase64DecodingOptions.fromRaw(0)!) let decodedString = NSString(data: decodedData, encoding: NSUTF8StringEncoding) println(decodedString) // my plain data 

More on this http://creativecoefficient.net/swift/encoding-and-decoding-base64/

+12
Sep 29 '15 at 10:09
source share

Xcode 8.3.2 • Swift 3.1

 extension String { var data: Data { return Data(utf8) } var base64Encoded: Data { return data.base64EncodedData() } var base64Decoded: Data? { return Data(base64Encoded: self) } } extension Data { var string: String? { return String(data: self, encoding: .utf8) } } 



 let original = "iOS Developer Tips encoded in Base64" let utf8Data = original.data // 36 bytes let base64EncodedString = utf8Data.base64EncodedString() // aU9TIERldmVsb3BlciBUaXBzIGVuY29kZWQgaW4gQmFzZTY0\n" let base64EncodedData = utf8Data.base64EncodedData() // 48 bytes" print("base64EncodedData:", original.base64Encoded) // 48 bytes print("base64EncodedString:", original.base64Encoded.string ?? "") // "aU9TIERldmVsb3BlciBUaXBzIGVuY29kZWQgaW4gQmFzZTY0" print("base64DecodedData:", original.base64Encoded.string?.base64Decoded ?? "") // 36 bytes print("base64DecodedString:", original.base64Encoded.string?.base64Decoded?.string ?? "") // iOS Developer Tips encoded in Base64 
+12
May 6 '17 at 7:31 a.m.
source share

Swift 4.2

 "abcd1234".data(using: .utf8)?.base64EncodedString() 
+12
Nov 15 '18 at 5:24
source share

Swift 3 or 4

 let base64Encoded = Data("original string".utf8).base64EncodedString() 
+5
Sep 28 '16 at 19:28
source share

Swift 3

Here is a simple String extension, updated for Swift 3, which allows you to save additional options in case of decoding errors.

 extension String { /// Encode a String to Base64 func toBase64() -> String { return Data(self.utf8).base64EncodedString() } /// Decode a String from Base64. Returns nil if unsuccessful. func fromBase64() -> String? { guard let data = Data(base64Encoded: self) else { return nil } return String(data: data, encoding: .utf8) } } 

Example:

 let testString = "A test string." let encoded = testString.toBase64() // "QSB0ZXN0IHN0cmluZy4=" guard let decoded = encoded.fromBase64() // "A test string." else { return } 
+5
04 Oct '16 at 9:08
source share

After all the struggle, I liked it.

 func conversion(str:NSString) { if let decodedData = NSData(base64EncodedString: str as String, options:NSDataBase64DecodingOptions(rawValue: 0)), let decodedString = NSString(data: decodedData, encoding: NSUTF8StringEncoding) { print(decodedString)//Here we are getting decoded string 

After calling another function to convert the decoded string to a dictionary

  self .convertStringToDictionary(decodedString as String) } }//function close 

// for a string in a dictionary

 func convertStringToDictionary(text: String) -> [String:AnyObject]? { if let data = text.dataUsingEncoding(NSUTF8StringEncoding) { do { let json = try NSJSONSerialization.JSONObjectWithData(data, options: []) as? [String:AnyObject] print(json) if let stack = json!["cid"] //getting key value here { customerID = stack as! String print(customerID) } } catch let error as NSError { print(error) } } return nil } 
+2
Apr 26 '16 at 7:24
source share

FOR SWIFT 3.0

 let str = "iOS Developer Tips encoded in Base64" print("Original: \(str)") let utf8str = str.data(using: String.Encoding.utf8) if let base64Encoded = utf8str?.base64EncodedString(options: NSData.Base64EncodingOptions(rawValue: 0)) { print("Encoded: \(base64Encoded)") if let base64Decoded = NSData(base64Encoded: base64Encoded, options: NSData.Base64DecodingOptions(rawValue: 0)) .map({ NSString(data: $0 as Data, encoding: String.Encoding.utf8.rawValue) }) { // Convert back to a string print("Decoded: \(base64Decoded)!") } } 
+2
Jan 05 '17 at 13:54 on
source share

SwiftyBase64 (full disclosure: I wrote) is the native Swift Base64 encoding (without a decoding library, with it you can encode the Base64 standard:

 let bytesToEncode : [UInt8] = [1,2,3] let base64EncodedString = SwiftyBase64.EncodeString(bytesToEncode) 

or URL and Safe Base64 file name:

 let bytesToEncode : [UInt8] = [1,2,3] let base64EncodedString = SwiftyBase64.EncodeString(bytesToEncode, alphabet:.URLAndFilenameSafe) 
0
Aug 08 '15 at 16:59
source share

@Airpeed Velocity answer in Swift 2.0:

 let str = "iOS Developer Tips encoded in Base64" print("Original: \(str)") let base64Encoded = str.dataUsingEncoding(NSUTF8StringEncoding)!.base64EncodedStringWithOptions([]) print("Encoded: \(base64Encoded)") let base64DecodedData = NSData(base64EncodedString: base64Encoded, options: [])! var base64DecodedString = String(data: base64DecodedData, encoding: NSUTF8StringEncoding)! print("Decoded: \(base64DecodedString)") 
0
Sep 05 '16 at 7:42 on
source share

Swift 4.2

 var base64String = "my fancy string".data(using: .utf8, allowLossyConversion: false)?.base64EncodedString() 

decrypt, see (from https://gist.github.com/stinger/a8a0381a57b4ac530dd029458273f31a )

 //: # Swift 3: Base64 encoding and decoding import Foundation extension String { //: ### Base64 encoding a string func base64Encoded() -> String? { if let data = self.data(using: .utf8) { return data.base64EncodedString() } return nil } //: ### Base64 decoding a string func base64Decoded() -> String? { if let data = Data(base64Encoded: self) { return String(data: data, encoding: .utf8) } return nil } } var str = "Hello, playground" print("Original string: \"\(str)\"") if let base64Str = str.base64Encoded() { print("Base64 encoded string: \"\(base64Str)\"") if let trs = base64Str.base64Decoded() { print("Base64 decoded string: \"\(trs)\"") print("Check if base64 decoded string equals the original string: \(str == trs)") } } 
0
Jun 13 '19 at 1:53 on
source share



All Articles