分类 swift 下的文章

swift数据加密

//
//  ViewController.swift
//  加密
//
//  Created by admin on 16/2/27.
//  Copyright © 2016年 jin. All rights reserved.
//

import UIKit

class ViewController: UIViewController,UIPickerViewDelegate,UIPickerViewDataSource {
    @IBOutlet weak var picker: UIPickerView!
    @IBOutlet weak var textField: UITextField!
    @IBOutlet weak var message: UILabel!
    @IBOutlet weak var keyText: UITextField!
    @IBOutlet weak var valueText: UITextField!

    let encodeArr = ["sha1","md5","hmacMD5StringWithKey"]
    let key = "jin"
    override func viewDidLoad() {
        super.viewDidLoad()
    }
    // 设备标识,存钥匙串数据的时候需要标识,这里取的时候用到了第三方库SSKeychain
    let service = "keyChainTest"
    @IBAction func saveKeyChain(sender: AnyObject) {
        // 设置钥匙串
        SSKeychain.setPassword(self.valueText.text, forService: self.service, account: self.keyText.text)
    }
    @IBAction func readKeyChain(sender: AnyObject) {
        // 打印所有钥匙串
        print(SSKeychain.allAccounts())
        // 取出钥匙串
        let content = SSKeychain.passwordForService(self.service, account: self.keyText.text)
        self.message.text = content
    }
    // 对数据进行编码,这里需要用到第三方类库
    @IBAction func encode(sender: AnyObject) {
        let str:NSString = self.textField.text!
        var encodeString = ""
        switch self.picker.selectedRowInComponent(0)
        {
        case 0:
            encodeString = str.sha1String()
            break
        case 1:
            encodeString = str.md5String()
        case 2:
            encodeString = str.hmacMD5StringWithKey(self.key)
            break
        default:
            break
        }
        self.message.text = encodeString
    }
    // 设置pickerView分组数量
    func numberOfComponentsInPickerView(pickerView: UIPickerView) -> Int {
        return 1
    }
    // 设置pickerView分组行数
    func pickerView(pickerView: UIPickerView, numberOfRowsInComponent component: Int) -> Int {
        return self.encodeArr.count
    }
    // 返回分组标题
    func pickerView(pickerView: UIPickerView, titleForRow row: Int, forComponent component: Int) -> String? {
        return self.encodeArr[row]
    }
}

base加密解密

//
//  ViewController.swift
//  base64
//
//  Created by zhang on 16/2/26.
//  Copyright © 2016年 jin. All rights reserved.
//

import UIKit

class ViewController: UIViewController {

    @IBOutlet weak var name: UITextField!
    @IBOutlet weak var password: UITextField!
    @IBOutlet weak var messageLable: UILabel!
    override func viewDidLoad() {
        super.viewDidLoad()
        let userDefault = NSUserDefaults.standardUserDefaults()
        let userName = userDefault.valueForKey("username")
        print(userName)
        if userName != nil
        {
            self.name.text = self.decode(userName as! String)
            let password = userDefault.valueForKey("password")
            self.password.text = self.decode(password as! String)
        }
    }

    @IBAction func login(sender: AnyObject) {
        let username = self.name.text
        let password = self.password.text
        let url = NSURL(string: "http://localhost/login.php")
        let request = NSMutableURLRequest(URL: url!, cachePolicy: NSURLRequestCachePolicy.ReloadIgnoringCacheData, timeoutInterval: 10)
        request.HTTPMethod = "post"
        let dataString = "username=\(self.encode(username!))&password=\(self.encode(password!))"
        print(dataString)
        request.HTTPBody = dataString.dataUsingEncoding(NSUTF8StringEncoding)
        NSURLConnection.sendAsynchronousRequest(request, queue: NSOperationQueue()) { (response:NSURLResponse?, data:NSData?, error:NSError?) -> Void in
            let json:AnyObject? = try? NSJSONSerialization.JSONObjectWithData(data!, options: NSJSONReadingOptions.AllowFragments)
            let userId:Int! = json?.valueForKey("userId") as! Int
            var str = ""
            if userId != nil && userId > 0
            {
                str = "登陆成功"
                let userDefault = NSUserDefaults.standardUserDefaults()
                userDefault.setObject(self.encode(username!), forKey: "username")
                userDefault.setObject(self.encode(password!), forKey: "password")
                userDefault.synchronize()
            }
            else
            {
                str = "登陆失败"
            }
            NSOperationQueue.mainQueue().addOperationWithBlock({ [weak self,str] () -> Void in
                self!.messageLable.text = str
            })
        }
    }
    func encode(str:String)->String
    {
        // 字符串转换成d
        let data = str.dataUsingEncoding(NSUTF8StringEncoding)
        let encodeStr = data?.base64EncodedStringWithOptions(NSDataBase64EncodingOptions.Encoding64CharacterLineLength)
        return encodeStr!
    }
    func decode(str:String)->String
    {
        let decode = NSData(base64EncodedString: str, options: NSDataBase64DecodingOptions.IgnoreUnknownCharacters)
        return String(data: decode!, encoding: NSUTF8StringEncoding)!
    }
}

swift直接传输json字串

客户端

//
//  ViewController.swift
//  http请求
//
//  Created by admin on 16/2/26.
//  Copyright © 2016年 jin. All rights reserved.
//

import UIKit

class ViewController: UIViewController {

    override func viewDidLoad() {
        super.viewDidLoad()
        self.sendJSON()
    }
    func sendJSON()
    {
        let urlStr = "http://test.com/postjson.php"
        let url = NSURL(string: urlStr.stringByAddingPercentEscapesUsingEncoding(NSUTF8StringEncoding)!)
        let request = NSMutableURLRequest(URL: url!, cachePolicy: NSURLRequestCachePolicy.ReloadIgnoringCacheData, timeoutInterval: 10)
        let jsonData = ["name":"jin","age":18]
        // 检查数据类型是否能转换成json
        if NSJSONSerialization.isValidJSONObject(jsonData) == false
        {
            print("格式错误")
            exit(1)
        }
        let sendData = try? NSJSONSerialization.dataWithJSONObject(jsonData, options: NSJSONWritingOptions.PrettyPrinted)
        // 设置类型以及数据
        request.HTTPMethod = "post"
        request.HTTPBody = sendData
        NSURLConnection.sendAsynchronousRequest(request, queue: NSOperationQueue()) { (response:NSURLResponse?, data:NSData?, error:NSError?) -> Void in
            let jsonData:AnyObject? = try? NSJSONSerialization.JSONObjectWithData(data!, options: NSJSONReadingOptions.MutableContainers)
            print(jsonData)
        }
    }
}

服务器

header('Content-Type:text/plain;charset=utf-8');

$json = file_get_contents('php://input');
// 反序列化JSON
$obj = json_decode($json, TRUE ); 

// 打印对象明细信息
echo json_encode($obj);

swift实现http上传

//
//  ViewController.swift
//  http请求
//
//  Created by admin on 16/2/26.
//  Copyright © 2016年 jin. All rights reserved.
//

import UIKit

class ViewController: UIViewController {

    override func viewDidLoad() {
        super.viewDidLoad()
        self.uploadFile()
    }
    func uploadFile()
    {
        let urlStr = "http://test.com/upload.php"
        let url = NSURL(string: urlStr.stringByAddingPercentEscapesUsingEncoding(NSUTF8StringEncoding)!)

        var request = NSMutableURLRequest(URL: url!, cachePolicy: NSURLRequestCachePolicy.ReloadIgnoringCacheData, timeoutInterval: 10)
        // 设置上传文件所需要的信息
        self.setUploadRequest(&request,filePath: NSBundle.mainBundle().pathForResource("2.jpg", ofType: nil)!)

        NSURLConnection.sendAsynchronousRequest(request, queue: NSOperationQueue()) { (response: NSURLResponse?, data:NSData?, error:NSError?) -> Void in
            let json:AnyObject? = try? NSJSONSerialization.JSONObjectWithData(data!, options: NSJSONReadingOptions.MutableContainers)
            print(json)
        }
    }
    // 设置上传文件的头
    func setUploadRequest(inout request:NSMutableURLRequest,filePath:String)->NSMutableURLRequest
    {
        let seperator = "jin"
        // 设置请求类型
        request.HTTPMethod = "post"
        // 设置http头
        // Content-Type multipart/form-data; boundary(分隔符)=(可以随便写, 但是不能有中文)
        let header = "multipart/form-data; boundary=\(seperator)"
        request.setValue(header, forHTTPHeaderField: "Content-Type")

        // 拼接数据
        let bodyData = NSMutableData()
        // \r\n--(可以随便写, 但是不能有中文)\r\n
        var str = "\r\n--\(seperator)\r\n"
        bodyData.appendData(str.dataUsingEncoding(NSUTF8StringEncoding)!)

        // Content-Length(文件的大小)    这个不用写
        // Content-Disposition: form-data; name="userfile(php脚本中用来读取文件的字段)"; filename="demo.json(要保存到服务器的文件名)"\r\n
        str = "Content-Disposition: form-data; name=\"uploadFile\"; filename=\"newFile.jpg\"\r\n"
        bodyData.appendData(str.dataUsingEncoding(NSUTF8StringEncoding)!)

        // Content-Type: application/octet-stream(上传文件的类型)\r\n\r\n
        str = "Content-Type: application/octet-stream\r\n\r\n"
        bodyData.appendData(str.dataUsingEncoding(NSUTF8StringEncoding)!)

        // 要上传的文件的二进制流
        let fileData = NSData(contentsOfFile: filePath)
        bodyData.appendData(fileData!)

        // \r\n--(可以随便写, 但是不能有中文)--\r\n
        str = "\r\n--\(seperator)--\r\n"
        bodyData.appendData(str.dataUsingEncoding(NSUTF8StringEncoding)!)
        request.HTTPBody = bodyData
        return request
    }
}

发送http请求(get,post)

//
//  ViewController.swift
//  http请求
//
//  Created by admin on 16/2/26.
//  Copyright © 2016年 jin. All rights reserved.
//

import UIKit

class ViewController: UIViewController {

    override func viewDidLoad() {
        super.viewDidLoad()
        self.post()
    }
    func post()
    {
        let urlStr = "http://test.com/login.php"
        // url中含有中文的话需要编码下
        let url = NSURL(string: urlStr.stringByAddingPercentEscapesUsingEncoding(NSUTF8StringEncoding)!)

        // 初始化可变请求,用以之后改变对象的属性
        let request = NSMutableURLRequest(URL: url!, cachePolicy: NSURLRequestCachePolicy.ReloadIgnoringCacheData, timeoutInterval: 10)
        request.HTTPMethod = "post"
        // 设置post数据,为字符串格式
        let postData = "username=张三&password=zhang"
        // 设置请求的data,需要转换成二进制的数据类型
        request.HTTPBody = postData.dataUsingEncoding(NSUTF8StringEncoding)
        NSURLConnection.sendAsynchronousRequest(request, queue: NSOperationQueue()) { (responce:NSURLResponse?, data:NSData?, error:NSError?) -> Void in
            if data != nil
            {
                let json:AnyObject? = try? NSJSONSerialization.JSONObjectWithData(data!, options: NSJSONReadingOptions.MutableContainers)
                print(json)
            }

        }
    }
    func get()
    {
        let urlStr = "http://test.com/login.php?username=张三&password=zhang"
        // url中含有中文的话需要编码下
        let url = NSURL(string: urlStr.stringByAddingPercentEscapesUsingEncoding(NSUTF8StringEncoding)!)
        let request = NSURLRequest(URL: url!, cachePolicy: NSURLRequestCachePolicy.ReloadIgnoringCacheData, timeoutInterval: 10)
        NSURLConnection.sendAsynchronousRequest(request, queue: NSOperationQueue()) { (responce:NSURLResponse?, data:NSData?, error:NSError?) -> Void in
            if data != nil
            {
                let json:AnyObject? = try? NSJSONSerialization.JSONObjectWithData(data!, options: NSJSONReadingOptions.MutableContainers)
                print(json)
            }

        }
    }
}