[Swift通天遁地]七、数据与安全,18使用Swift实现原生的MD5加密

★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★

➤微信公众号:山青咏芝(shanqingyongzhi)

➤博客园地址:山青咏芝(https://www.cnblogs.com/strengthen/

➤GitHub地址:https://github.com/strengthen/LeetCode

➤原文地址:

➤如果链接不是山青咏芝的博客园地址,则可能是爬取作者的文章。

➤原文已修改更新!强烈建议点击原文地址阅读!支持作者!支持原创!

★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★

热烈欢迎,请直接点击!!!

进入博主App Store主页,下载使用各个作品!!!

注:博主将坚持每月上线一个新app!!!

目录:[Swift]通天遁地Swift

本文将演示如何使用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 }