swift 3.0中使用MD5加密

首先我们需要一个桥接文件
  • 首先创建一个OC文件,任意名字都可以
  • 创建完会询问我们是否需要建立一个 bridging-header文件,我们选择是,此时就生成一个swift-objective-c的桥接文件
  • 移除刚才创建的OC文件(.h和.m)
  • bridging-header文件中导入我们需要的头文件
// MD5 所需文件
#import <CommonCrypto/CommonDigest.h>
在你的拓展类中加入拓展方法
// MARK: MD5
extension String {
    func md5() -> String {
        let str = self.cString(using: String.Encoding.utf8)
        let strLen = CUnsignedInt(self.lengthOfBytes(using: String.Encoding.utf8))
        let digestLen = Int(CC_MD5_DIGEST_LENGTH)
        let result = UnsafeMutablePointer<CUnsignedChar>.allocate(capacity: digestLen)
        CC_MD5(str!, strLen, result)
        let hash = NSMutableString()
        for i in 0 ..< digestLen {
            hash.appendFormat("%02x", result[i])
        }
        result.deinitialize()
        
        return String(format: hash as String)
    }
}
外部调用MD5加密算法
var str = "test"
let str_MD5 = str.md5()
MD5的理解,网上找的复制过来

其中%02x是格式控制符:‘x’表示以16进制输出,‘02’表示不足两位,前面补0;如‘f’输出为0f,‘1f3’则输出1f3;本来一般的都会介绍到这里就完了,我想多介绍一下代码中result是个字符数组,那为什么是[16]呢,这是因为MD5算法最后生成的是128位,而在计算机的最小存储单位为字节,1个字节是8位,对应一个char类型,计算可得需要16个char。所以result是[16]。那么为什么输出的格式一定是%02x呢,而不是其它呢。这也是有原因的:因为约定MD5一般是以16进制的格式输出,那么其实这个问题就转换为把128个0和1以16进制来表示,每4位二进制对应一个16进制的元素,则需要32个16进制的元素,如果元素全部为0,放到char的数组中,正常是不会输出,如00001111,以%x输出,则是f,那么就会丢失0;但如果以%02x表示则输出结果是0f,正好是转换的正确结果。

所以以上就是char[16]和%02x的来历。

至于人们说的16位MD5加密,其实是这样的:举例如果产生的MD5加密字符串是:01234567abcdefababcdefab76543210,则16位的MD加密字符是abcdefababcdefab,也就是只是截取了中间的16位。实际上这个操作已经不是MD5加密算法所包括的,而应当是对MD5加密算法结果的二次处理。其它的64位和大小写什么的,都属于对MD5算法结果的二次处理。因为MD5算法产生的结果就是128bit,128个二进制数字。

以上就是我对MD5关于16位和32位的一些简单理解,呵呵。

OC的可以参考一下http://blog.csdn.net/a787188834/article/details/53244238

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,324评论 5 476
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,303评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,192评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,555评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,569评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,566评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,927评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,583评论 0 257
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,827评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,590评论 2 320
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,669评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,365评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,941评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,928评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,159评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,880评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,399评论 2 342

推荐阅读更多精彩内容

  • 先说一下:MD5加密可破解,每一个原密码对应一个不变的MD5加密的密码效果: MD5加密demo 密码: c1j2...
    IIronMan阅读 2,391评论 2 32
  • 软件开发过程中,对数据进行加密是保证数据安全的重要手段,常见的加密有Base64加密和MD5加密。Base64加密...
    Billy_W阅读 1,792评论 0 0
  • 常见的加密算法 MD5 \ SHA \ DES \ 3DES \ RC2和RC4 \ RSA \ IDEA \ D...
    小小啄阅读 3,086评论 0 9
  • 开篇应该先说明一下这是我写的第一篇技术博客,水平高低的大家多提宝贵意见。最近做的一个和蓝牙交互的iOS APP,其...
    AmdyTeng阅读 2,117评论 0 3
  • 黑色幽默恰巧出现 在扎眼的阳光下面 匆忙的人都低着头走过 而你站在树荫下面 逗弄那只花斑点的猫 命运给的是擦肩而过...
    小橙君阅读 186评论 0 1