Swift String MD5、base64、sha1

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
    }
    
}
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容