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


    ★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★
    ➤微信公众号:山青咏芝(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 }
  • 相关阅读:
    C#调用Halcon
    C#跨窗体程序调用方法的具体操作
    C#调用DLL报错:试图加载格式不正确的程序
    C#窗体程序设置禁用关闭按钮
    C#窗体程序设置禁用关闭按钮
    C#在字符串中查询指定字符串是否存在
    poj1654
    poj1873
    poj2451
    poj1113
  • 原文地址:https://www.cnblogs.com/strengthen/p/10346955.html
Copyright © 2020-2023  润新知