1、簡介
在與后端服務(wù)器交互的過程中我們經(jīng)常會用到MD5等加密方式,之前在OC中我們常用的方式是給NSString新增一個(gè)category,在category的.m文件中引入#import <CommonCrypto/CommonDigest.h>就可以使用其中的C加密函數(shù)CC_MD5了。那么在swift里由于CommonDigest.h 為OC中的類庫所以我們要做的第一步便是搭橋。 最簡單的方法就是創(chuàng)建一個(gè)OC的類然后根據(jù)提示創(chuàng)建相應(yīng)的bridge文件,最后再刪除OC文件,在bridge的頭文件中到如CommonDigest,然后我們便可以在Swift里使用CC_MD5了。
2、Swift 中的 category
在swift中要實(shí)現(xiàn)OC中的category我們需要借助extension classname
3、創(chuàng)建String的Extension來實(shí)現(xiàn)標(biāo)題中的3中加密或編碼方式
//
// String+Security.swift
//
//
// Created by VcaiTech on 2017/5/15.
// Copyright ? 2017年 Tang guifu. All rights reserved.
//
import Foundation
extension String {
func md5() -> String {
let str = self.cString(using: String.Encoding.utf8)
let strLen = CUnsignedInt(self.lengthOfBytes(using: String.Encoding.utf8))
let digestLen = Int(CC_MD5_DIGEST_LENGTH)
let result = UnsafeMutablePointer<CUnsignedChar>.allocate(capacity: digestLen)
CC_MD5(str!, strLen, result)
let hash = NSMutableString()
for i in 0 ..< digestLen {
hash.appendFormat("%02x", result[i])
}
result.deinitialize()
return String(format: hash as String)
}
func sha1() -> String {
let str = self.cString(using: String.Encoding.utf8)
let strLen = CUnsignedInt(self.lengthOfBytes(using: String.Encoding.utf8))
let digestLen = Int(CC_SHA1_DIGEST_LENGTH)
let result = UnsafeMutablePointer<CUnsignedChar>.allocate(capacity: digestLen)
CC_SHA1(str!, strLen, result)
let hash = NSMutableString()
for i in 0 ..< digestLen {
hash.appendFormat("%02x", result[i])
}
result.deinitialize()
return String(format: hash as String)
}
func base64decode() -> String? {
let decodeData:Data? = Data.init(base64Encoded: self, options: Data.Base64DecodingOptions.init(rawValue: 0))
guard let utf8Data = decodeData else{
return nil
}
let decodedStr:String? = String.init(data: utf8Data, encoding: String.Encoding.utf8)
return decodedStr
}
func base64encode() -> String? {
let utf8str:Data? = self.data(using: String.Encoding.utf8)
guard let utf8Data = utf8str else{
return nil
}
let base64Encoded:String = utf8Data.base64EncodedString(options: Data.Base64EncodingOptions.init(rawValue: 0))
return base64Encoded
}
}