用Swift实现MD5算法&引入第三方类库(MBProgressHUD)

之前项目里面是用objc写的MD5加密算法,最近在用swift重写以前的项目,遇到了这个问题。好在最后解决了。顺带解决掉的还有如何引入第三方的类库,例如MBProgressHUD(SVProgressHUD)等一些特别好的控件

解决的方法其实是用objc和swift混合编程的方法,利用Bridging-header文件。

什么是Briding-header?你可以简单的理解为在一个用swift语言开发的工程中,引入objective-c文件是需要做的一个串联文件,好比架设了一个桥,让swift中也可以调用objective-c的类库和frame等等。

那么问题来了,如何才能新建这个Briding-header文件?

1.
确保你的工程是用swift建立的

图中的language选择swift


2.
任意新建一个类,语言选取objective-c

这个步骤仅仅是为了生成我们需要的一个文件;之后我们将删除本步骤中建好的类,所以类名什么的随便起好了

任意写入类名,next之后,我们会得到一条提示,提示我们是否要建立这个bridging-header文件,我们选择是,就可以看到目录中多出来这样一个xxx-bridging-header.h的文件,

然后移除这个文件中的所有内容,并且移除我们之前步骤中生成的objc的.h和.m两个文件(当然如果有用你可以保留下来)。

3.
接下来,在xxx-bridging-header.h 中import进入我们想要的各种文件。

在我的实例项目中共import了两个,第一行是为了写MD5算法,第二行是为了调用第三方的类库,MBProgressHUD

我们分开来说吧:

MD5算法

我们需要import <CommonCrypto/CommonDigest.h>

之后,在你的任意一个.swift文件中,写入下面的代码

extension String{
    func md5() ->String!{
        let str = self.cStringUsingEncoding(NSUTF8StringEncoding)
        let strLen = CUnsignedInt(self.lengthOfBytesUsingEncoding(NSUTF8StringEncoding))
        let digestLen = Int(CC_MD5_DIGEST_LENGTH)
        let result = UnsafeMutablePointer<CUnsignedChar>.alloc(digestLen)
        CC_MD5(str!, strLen, result)
        var hash = NSMutableString()
        for i in 0 ..< digestLen {
            hash.appendFormat("%02x", result[i])
        }
        result.destroy()
        return String(format: hash as String)
    }
}

我的Xcode版本是6.3的beta5,因为6.1.1总是会跳出一个什么XXXkit crash掉的错误,特别烦人,网上找了好久说的方法都没有用,就只好去apple 官网下了个beat版的6.3安装, 感觉好多了。

6.3里面更新了apple watch(细心的朋友可以在上面的图里面发现apple watch的影子) 和swift1.2, 所以一些swift的语法可能有细小差别,不过应该影响不大,这个我参照stackoverflow上的大神的解答:

另一位大神估计是用的和我一样版本的,不过还是在string(format)语句里面有些小的差别

这样,我们就可以直接这样写来调用md5算法:

var str = "test123"
var str_Md5 = str.md5()

很简单的吧,因为加入了extension String之后,String类就有了一个函数 md5,结果就是直接返回当前str的MD5加密后的结果

MBProgressHUD

这个就更简单了,去GitHub上下载最新的MBProgressHUD, 然后把.h 和.m 文件拷贝到项目工程里面,可以在之前的图片里面看到,然后在bridging-header.h中加入第二行

#import "MBProgressHUD.h"

然后你就可以在你的项目中这样生成:

   //show the loadingNotification
            let loadingNotification = MBProgressHUD.showHUDAddedTo(self.view, animated: true)
            loadingNotification.mode = MBProgressHUDModeIndeterminate
            loadingNotification.labelText = "查询中..."

然后这样消除

MBProgressHUD.hideAllHUDsForView(self.view, animated: true)

关于MBProgressHUD的用法我就不详细展开说了,一个功能很强大,又很美观的第三方控件,大家可以自己研究下

时间: 2024-11-01 06:19:18

用Swift实现MD5算法&amp;引入第三方类库(MBProgressHUD)的相关文章

CodeIgniter辅助之第三方类库third_party用法分析_php实例

本文实例分析了CodeIgniter辅助之第三方类库third_party用法.分享给大家供大家参考,具体如下: third_party用来存放系统中引入的第三方类库,类库通常提供的功能比较丰富,相应的学习成本也要高些,系统中能用到功能有限,所以建议在引入类库时进行适当的封装,让系统中更方便使用,其他人使用时只需关注扩展的方法而无法关注具体的实现.以CI集成Twig模版为例吧. 首先需要下载Twig类库,并放在third_party中,然后在libraries中进行一次封装,示例如下: <?ph

MD5算法研究

算法 综述 MD5的全称是Message-Digest Algorithm 5(信息-摘要算法),在90年代初由MIT Laboratory for Computer Science和RSA Data Security Inc的Ronald L. Rivest开发出来,经MD2.MD3和MD4发展而来.它的作用是让大容量信息在用数字签名软件签署私人密匙前被"压缩"成一种保密的格式(就是把一个任意长度的字节串变换成一定长的大整数).不管是MD2.MD4还是MD5,它们都需要获得一个随机长

MD5算法研究(1)

算法 综述 MD5的全称是Message-Digest Algorithm 5(信息-摘要算法),在90年代初由MIT Laboratory for Computer Science和RSA Data Security Inc的Ronald L. Rivest开发出来,经MD2.MD3和MD4发展而来.它的作用是让大容量信息在用数字签名软件签署私人密匙前被"压缩"成一种保密的格式(就是把一个任意长度的字节串变换成一定长的大整数).不管是MD2.MD4还是MD5,它们都需要获得一个随机长

MD5算法解析

MD5的全称是Message-Digest Algorithm 5,在90年代初由MIT的计算机科学实验室和RSA Data Security Inc发明,经MD2.MD3和MD4发展而来. MD5将任意长度的"字节串"变换成一个128bit的大整数,并且它是一个不可逆的字符串变换算法,换句话说就是,即使你看到源程序和算法描述,也无法将一个MD5的值变换回原始的字符串,从数学原理上说,是因为原始的字符串有无穷多个,这有点象不存在反函数的数学函数. MD5的典型应用是对一段Message

MD5算法原理

//建议参考1 MD5(单向散列算法)的全称是Message-Digest Algorithm 5(信息-摘要算法),经MD2.MD3和MD4发展而来.MD5算法的使用不需要支付任何版权费用.     MD5功能:    输入任意长度的信息,经过处理,输出为128位的信息(数字指纹):    不同的输入得到的不同的结果(唯一性):    根据128位的输出结果不可能反推出输入的信息(不可逆):      MD5属不属于加密算法:    认为不属于的人是因为他们觉得不能从密文(散列值)反过来得到原

【VB】MD5算法

昨天才真正搞懂,ASP.NET和ASP是不同的!! google上搜了下,感觉这个介绍的挺好的: ASP.Net和ASP的最大区别在于编程思维的转换,而不仅仅在于功能的增强.ASP使用VBS/JS这样的脚本语言混合html来编程,而那些脚本语言属于弱类型.面向结构的编程语言,而非面向对象,这就明显产生以下几个问题: 1.代码逻辑混乱,难于管理:由于ASP是脚本语言混合html编程,所以你很难看清代码的逻辑关系,并且随着程序的复杂性增加,使得代码的管理十分困难,甚至超出一个程序员所能达到的管理能力

java MD5算法返回数字型字串

算法   常有人问及MD5算法为何有些程序片断返回完全数字型结果而有些返回数字与字母的混合字串. 其实两种返回结果只是因为加密结果的不同显示形式,Blog中已经有.Net的实现,在此附加JAVA实现,供参考. JAVA的标准类库理论上功能也很强大,但由于虚拟机/运行时的实现太多,加之版本差异,有些代码在不同环境下运行会出现奇怪的异常结果,尤其以涉及字符集的操作为甚. package com.bee.framework.common; import java.security.MessageDig

MD5算法研究(2)

算法 FF(b,c,d,a,M3,22,0xc1bdceee) FF(a,b,c,d,M4,7,0xf57c0faf) FF(d,a,b,c,M5,12,0x4787c62a) FF(c,d,a,b,M6,17,0xa8304613) FF(b,c,d,a,M7,22,0xfd469501) FF(a,b,c,d,M8,7,0x698098d8) FF(d,a,b,c,M9,12,0x8b44f7af) FF(c,d,a,b,M10,17,0xffff5bb1) FF(b,c,d,a,M11,2

MD5算法说明(转)

算法 MD5算法说明 1.MD5算法是对输入的数据进行补位,使得如果数据位长度LEN对512求余的结果是448.  即数据扩展至K*512+448位.即K*64+56个字节,K为整数.  具体补位操作:补一个1,然后补0至满足上述要求 2.补数据长度:  用一个64位的数字表示数据的原始长度B,把B用两个32位数表示.这时,数据就被填  补成长度为512位的倍数. 3. 初始化MD5参数   四个32位整数 (A,B,C,D) 用来计算信息摘要,初始化使用的是十六进制表示的数字       A=