本文将演示如何使用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 }
原文地址:https://www.cnblogs.com/strengthen/p/10346922.html
时间: 2024-11-09 23:39:27