1. 程式人生 > >[Swift通天遁地]七、數據與安全-(18)使用Swift實現原生的MD5加密

[Swift通天遁地]七、數據與安全-(18)使用Swift實現原生的MD5加密

memory string hex ret 初始 ica 結果 個數 import

本文將演示如何使用Swift實現原生的MD5加密。

首先創建一個橋接頭文件,因為需要使用到OC語言的通用加密解密類庫。

在項目文件夾【DemoApp】上點擊鼠標右鍵,彈出右鍵菜單。

【New File】->【Header File】->【Next】->【Save As】:Header.h->【Create】

在該文件中,添加需要引用到的框架。

1 //添加需要引用到的框架。
2 #ifndef _4_1_2SecurityProject_MD5_Bridging_Header_h
3 #define _4_1_2SecurityProject_MD5_Bridging_Header_h
4
5 #import <CommonCrypto/CommonCrypto.h> 6 7 #endif /* _4_1_2SecurityProject_MD5_Bridging_Header_h */

點擊項目名稱【DemoApp】,顯示項目的屬性信息,

將頭文件添加到橋接頭選項中->【Build Settings】

->在搜索框內,輸入需要定位的設置項目的名稱:【Objective-C Bridging Hader】

->鼠標雙擊選項右側【Objective-C Bridging Hader】,彈出橋接頭文件設置窗口。

->在打開的輸入窗口中,輸入剛剛創建的頭文件的相對路徑:【DemoApp/Header.h】

現在創建類文件,實現具體加密操作。

在項目文件夾【DemoApp】上點擊鼠標右鍵,彈出右鍵菜單。

【New File】->【Swift File】->【Next】->【Save As】:StringMD5.swift->【Create】

 1 import Foundation
 2 
 3 //首先添加一個Int擴展
 4 extension Int
 5 {
 6     //添加一個擴展方法,用來將整數類型,轉換成十六進制的字符串。
 7     func hexedString() -> String
 8     {
 9         //
通過設置十六進制的格式, 10 //將自身轉換成十六進制的字符串 11 return NSString(format:"%02x", self) as String 12 } 13 } 14 15 //添加一個數據類型的擴展 16 extension NSData 17 { 18 //添加一個擴展方法,用來將數據類型,轉換成十六進制的字符串。 19 func hexedString() -> String 20 { 21 //初始化一個字符串對象 22 var string = String() 23 //將不安全原始指針格式的字節, 24 //轉換成不安全指針的格式 25 let unsafePointer = bytes.assumingMemoryBound(to: UInt8.self) 26 //添加一個循環語句 27 for i in UnsafeBufferPointer<UInt8>(start:unsafePointer, count: length) 28 { 29 //通過整形對象的擴展方法,將二進制數據轉換成十六進制的字符串。 30 string += Int(i).hexedString() 31 } 32 //返回十六進制的字符串。 33 return string 34 } 35 36 //添加一個擴展方法,實現對數據的MD5加密功能 37 func MD5() -> NSData 38 { 39 //首先創建一個16位長度的可變數據對象。 40 let result = NSMutableData(length: Int(CC_MD5_DIGEST_LENGTH))! 41 //將不安全原始指針格式的字節,轉換成不安全指針的格式。 42 let unsafePointer = result.mutableBytes.assumingMemoryBound(to: UInt8.self) 43 //通過調用加密方法,對數據進行加密,並將加密後的數據,存儲在可變數據對象中。 44 CC_MD5(bytes, CC_LONG(length), UnsafeMutablePointer<UInt8>(unsafePointer)) 45 //最後將結果轉換成數據格式對象並返回。 46 return NSData(data: result as Data) 47 } 48 } 49 50 //添加一個字符串擴展。 51 extension String 52 { 53 //添加一個擴展方法,實現加密的功能。 54 func MD5() -> String 55 { 56 //首先將字符串對象,轉換成指定編碼的數據對象 57 let data = (self as NSString).data(using: String.Encoding.utf8.rawValue)! as NSData 58 //調用數據對象的擴展方法,進行加密操作 59 //並返回十六進制的結果。 60 return data.MD5().hexedString() 61 } 62 }

在項目導航區,打開視圖控制器的代碼文件【ViewController.swift】

現在開始編寫代碼,實現原生的MD5加密。

 1 import UIKit
 2 
 3 class ViewController: UIViewController {
 4 
 5     override func viewDidLoad() {
 6         super.viewDidLoad()
 7         // Do any additional setup after loading the view, typically from a nib.
 8         
 9         //初始化一個待加密的字符串
10         let message = "https://www.cnblogs.com/strengthen/"
11         //然後對字符串進行加密,並在控制臺輸出加密後的結果。
12         print("Result:"+message.MD5())
13         //輸出加密後的字符串的長度。
14         print("Length:\(message.MD5().lengthOfBytes(using: String.Encoding.utf8))")
15     }
16 
17     override func didReceiveMemoryWarning() {
18         super.didReceiveMemoryWarning()
19         // Dispose of any resources that can be recreated.
20     }
21 }

[Swift通天遁地]七、數據與安全-(18)使用Swift實現原生的MD5加密