★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★
➤微信公众号:山青咏芝(shanqingyongzhi)
➤博客园地址:山青咏芝(https://www.cnblogs.com/strengthen/)
➤GitHub地址:https://github.com/strengthen/LeetCode
➤原文地址:https://www.cnblogs.com/strengthen/p/10346955.html 
➤如果链接不是山青咏芝的博客园地址,则可能是爬取作者的文章。
➤原文已修改更新!强烈建议点击原文地址阅读!支持作者!支持原创!
★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★

目录:[Swift]通天遁地Swift

本文将演示如何使用Swift实现原生的SHA1加密。

首先创建一个桥接头文件,因为需要使用到OC语言的通用加密解密类库。

在项目文件夹【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】,显示项目的属性信息,

将头文件添加到桥接头选项中->【Build Settings】

->在搜索框内,输入需要定位的设置项目的名称:【Objective-C Bridging Hader】

->鼠标双击选项右侧【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 }

转载于:https://www.cnblogs.com/strengthen/p/10346955.html

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

  1. [Swift通天遁地]七、数据与安全-(1)XML文档的创建和解析

    ★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★ ➤微信公众号:山青咏芝(shanqingyongzhi) ➤博客园地址:山青咏芝(https://www.cnblog ...

  2. [Swift通天遁地]七、数据与安全-(2)对XML和HTML文档的快速解析

    ★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★ ➤微信公众号:山青咏芝(shanqingyongzhi) ➤博客园地址:山青咏芝(https://www.cnblog ...

  3. [Swift通天遁地]七、数据与安全-(12)使用Instruments Leaks工具检测内存泄露

    ★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★ ➤微信公众号:山青咏芝(shanqingyongzhi) ➤博客园地址:山青咏芝(https://www.cnblog ...

  4. [Swift通天遁地]七、数据与安全-(6)管理文件夹和创建并操作文件

    ★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★ ➤微信公众号:山青咏芝(shanqingyongzhi) ➤博客园地址:山青咏芝(https://www.cnblog ...

  5. [Swift通天遁地]五、高级扩展-(4)快速生成Invert、Mix、Tint、Shade颜色及调整饱和度阶...

    ★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★ ➤微信公众号:山青咏芝(shanqingyongzhi) ➤博客园地址:山青咏芝(https://www.cnblog ...

  6. [Swift通天遁地]三、手势与图表-(10)创建包含圆点、方形、三角形图标的散点图表...

    ★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★ ➤微信公众号:山青咏芝(shanqingyongzhi) ➤博客园地址:山青咏芝(https://www.cnblog ...

  7. [Swift通天遁地]二、表格表单-(11)创建星期选项表单和拥有浮动标签的文本框

    ★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★ ➤微信公众号:山青咏芝(shanqingyongzhi) ➤博客园地址:山青咏芝(https://www.cnblog ...

  8. [Swift通天遁地]一、超级工具-(16)使用JTAppleCalendar制作美观的日历

    ★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★ ➤微信公众号:山青咏芝(shanqingyongzhi) ➤博客园地址:山青咏芝(https://www.cnblog ...

  9. [Swift通天遁地]八、媒体与动画-(13)CoreText框架实现图文混排

    ★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★ ➤微信公众号:山青咏芝(shanqingyongzhi) ➤博客园地址:山青咏芝(https://www.cnblog ...

最新文章

  1. mysql 主从单表_MySQL主从复制单表或者多表
  2. git菜单形式的_Idea:Git的常用菜单操作和常用命令
  3. python中的深拷贝_Python中的深拷贝和浅拷贝
  4. scrapy框架爬取知乎用户
  5. 苹果在中国的审核规律探索二
  6. HTML5网页设计基础——播放器图标
  7. winpe加载raid_winpe里添加raid驱动
  8. chrome 安装 gliffy 绘图插件以及使用
  9. 奇迹mu开服教程:服务端的架设及开服注意事项
  10. 完美屏蔽中国移动,四川手机报发的信息。
  11. TI基于DSP+ARM的双核架构如何相互通信
  12. U盘产生快捷方式病毒
  13. linux用户禁止登录,Linux限制用户登录
  14. 一个很简单的淘宝优惠券搜索助手 大家看看有没有用吧
  15. windows10和ubuntu两种环境搭建YOLOX环境配置,并训练VOC数据集
  16. RK3568外设资源
  17. linux脚本创建快捷方式,批处理BAT创建快捷方式
  18. 实现幸运抽奖——会员号的百位数字等于产生的随机数字即为幸运会员,
  19. Python 实现FIR低通滤波器设计
  20. 微信小程序引用阿里云图标的方法

热门文章

  1. Looping over the databases on a server
  2. 转: jdbc连接数据库需要注意和出错的地方
  3. 《第一行代码》学习笔记18-广播接收器Broadcast_Receiver(1)
  4. Microsoft.Net框架程序设计学习笔记(11):类型构造器
  5. 手把手教你自己写一个js表单验证框架
  6. C#中out 及 ref 区别
  7. CSS滤镜(Filters)
  8. 基于 Bitbucket Pipeline + Amazon S3 的自动化运维体系
  9. Java Eclipse进行断点调试
  10. CentOS LAMP一键安装网站环境及添加域名