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

★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★
➤微信公衆號:山青詠芝(shanqingyongzhi)
➤博客園地址:山青詠芝(https://www.cnblogs.com/strengthen/
➤GitHub地址:https://github.com/strengthen/LeetCode
➤原文地址:http://www.javashuo.com/article/p-hbprbbnc-mc.html 
➤若是連接不是山青詠芝的博客園地址,則多是爬取做者的文章。
➤原文已修改更新!強烈建議點擊原文地址閱讀!支持做者!支持原創!
★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★html

目錄:[Swift]通天遁地Swiftgit

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

首先建立一個橋接頭文件,由於須要使用到OC語言的通用加密解密類庫。swift

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

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

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

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

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

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

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

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

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

如今建立類文件,實現具體加密操做。

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

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

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

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

如今開始編寫代碼,實現原生的SHA1加密。

 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.SHA1())
13         //輸出加密後的字符串的長度。
14         print("Length:\(message.SHA1().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 }
相關文章
相關標籤/搜索