日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

[Swift通天遁地]七、数据与安全-(19)使用Swift实现原生的SHA1加密

發(fā)布時(shí)間:2025/7/14 编程问答 25 豆豆
生活随笔 收集整理的這篇文章主要介紹了 [Swift通天遁地]七、数据与安全-(19)使用Swift实现原生的SHA1加密 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★
?微信公眾號(hào):山青詠芝(shanqingyongzhi)
?博客園地址:山青詠芝(https://www.cnblogs.com/strengthen/)
?GitHub地址:https://github.com/strengthen/LeetCode
?原文地址:https://www.cnblogs.com/strengthen/p/10346955.html?
?如果鏈接不是山青詠芝的博客園地址,則可能是爬取作者的文章。
?原文已修改更新!強(qiáng)烈建議點(diǎn)擊原文地址閱讀!支持作者!支持原創(chuàng)!
★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★

目錄:[Swift]通天遁地Swift

本文將演示如何使用Swift實(shí)現(xiàn)原生的SHA1加密。

首先創(chuàng)建一個(gè)橋接頭文件,因?yàn)樾枰褂玫絆C語言的通用加密解密類庫。

在項(xiàng)目文件夾【DemoApp】上點(diǎn)擊鼠標(biāo)右鍵,彈出右鍵菜單。

【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 */

點(diǎn)擊項(xiàng)目名稱【DemoApp】,顯示項(xiàng)目的屬性信息,

將頭文件添加到橋接頭選項(xiàng)中->【Build Settings】

->在搜索框內(nèi),輸入需要定位的設(shè)置項(xiàng)目的名稱:【Objective-C Bridging Hader】

->鼠標(biāo)雙擊選項(xiàng)右側(cè)【Objective-C Bridging Hader】,彈出橋接頭文件設(shè)置窗口。

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

現(xiàn)在創(chuàng)建類文件,實(shí)現(xiàn)具體加密操作。

在項(xiàng)目文件夾【DemoApp】上點(diǎn)擊鼠標(biāo)右鍵,彈出右鍵菜單。

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

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

在項(xiàng)目導(dǎo)航區(qū),打開視圖控制器的代碼文件【ViewController.swift】

現(xiàn)在開始編寫代碼,實(shí)現(xiàn)原生的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 //初始化一個(gè)待加密的字符串。 10 let message = "https://www.cnblogs.com/strengthen/" 11 //對(duì)字符串進(jìn)行加密,并在控制臺(tái)輸出加密后的結(jié)果 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 }

?

轉(zhuǎn)載于:https://www.cnblogs.com/strengthen/p/10346955.html

總結(jié)

以上是生活随笔為你收集整理的[Swift通天遁地]七、数据与安全-(19)使用Swift实现原生的SHA1加密的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。