Swift - 常用 - 加密解密

Swift - 常用 - 加密解密,第1张

概述(1)首先创建桥接头文件bridge.h来包含需要引用的Objective-C头文件,并在项目中配置 #import <CommonCrypto/CommonHMAC.h> (2)下面是一个封装类,同时对String进行扩展。(除了SHA1,还可以使用其它算法比如MD5,SHA224等) //HMAC.swiftimport Foundationenum CryptoAlgorithm {

(1)首先创建桥接头文件brIDge.h来包含需要引用的Objective-C头文件,并在项目中配置

#import <CommonCrypto/CommonHMAC.h>

(2)下面是一个封装类,同时对String进行扩展。(除了SHA1,还可以使用其它算法比如MD5,SHA224等)

//HMAC.swiftimport Foundationenum CryptoAlgorithm {    case MD5,SHA1,SHA224,SHA256,SHA384,SHA512    var HMACAlgorithm: CCHmacAlgorithm {        var result: Int = 0 switch self { case .MD5: result = kCCHmacAlgMD5 case .SHA1: result = kCCHmacAlgSHA1 case .SHA224: result = kCCHmacAlgSHA224 case .SHA256: result = kCCHmacAlgSHA256 case .SHA384: result = kCCHmacAlgSHA384 case .SHA512: result = kCCHmacAlgSHA512 } return CCHmacAlgorithm(result) } var digestLength: Int { var result: Int32 = 0 switch self { case .MD5: result = CC_MD5_DIGEST_LENGTH case .SHA1: result = CC_SHA1_DIGEST_LENGTH case .SHA224: result = CC_SHA224_DIGEST_LENGTH case .SHA256: result = CC_SHA256_DIGEST_LENGTH case .SHA384: result = CC_SHA384_DIGEST_LENGTH case .SHA512: result = CC_SHA512_DIGEST_LENGTH } return Int(result) } } extension String { var md5: String! { let str = self.cStringUsingEnCoding(NSUTF8StringEnCoding) let strLen = CC_LONG(self.lengthOfBytesUsingEnCoding(NSUTF8StringEnCoding)) let digestLen = Int(CC_MD5_DIGEST_LENGTH) let result = UnsafeMutablePointer<CUnsignedChar>.alloc(digestLen) CC_MD5(str!,strLen,result) return stringFromBytes(result,length: digestLen) } var sha1: String! { let str = self.cStringUsingEnCoding(NSUTF8StringEnCoding) let strLen = CC_LONG(self.lengthOfBytesUsingEnCoding(NSUTF8StringEnCoding)) let digestLen = Int(CC_SHA1_DIGEST_LENGTH) let result = UnsafeMutablePointer<CUnsignedChar>.alloc(digestLen) CC_SHA1(str!,length: digestLen) } var sha256String: String! { let str = self.cStringUsingEnCoding(NSUTF8StringEnCoding) let strLen = CC_LONG(self.lengthOfBytesUsingEnCoding(NSUTF8StringEnCoding)) let digestLen = Int(CC_SHA256_DIGEST_LENGTH) let result = UnsafeMutablePointer<CUnsignedChar>.alloc(digestLen) CC_SHA256(str!,length: digestLen) } var sha512String: String! { let str = self.cStringUsingEnCoding(NSUTF8StringEnCoding) let strLen = CC_LONG(self.lengthOfBytesUsingEnCoding(NSUTF8StringEnCoding)) let digestLen = Int(CC_SHA512_DIGEST_LENGTH) let result = UnsafeMutablePointer<CUnsignedChar>.alloc(digestLen) CC_SHA512(str!,length: digestLen) } func stringFromBytes(bytes: UnsafeMutablePointer<CUnsignedChar>,length: Int) -> String{ let hash = NSMutableString() for i in 0..<length { hash.appendFormat("%02x",bytes[i]) } bytes.dealloc(length) return String(format: hash as String) } func hmac(algorithm: CryptoAlgorithm,key: String) -> String { let str = self.cStringUsingEnCoding(NSUTF8StringEnCoding) let strLen = Int(self.lengthOfBytesUsingEnCoding(NSUTF8StringEnCoding)) let digestLen = algorithm.digestLength let result = UnsafeMutablePointer<CUnsignedChar>.alloc(digestLen) let keyStr = key.cStringUsingEnCoding(NSUTF8StringEnCoding) let keyLen = Int(key.lengthOfBytesUsingEnCoding(NSUTF8StringEnCoding)) CCHmac(algorithm.HMACAlgorithm,keyStr!,keyLen,str!,result) let digest = stringFromresult(result,length: digestLen) result.dealloc(digestLen) return digest } private func stringFromresult(result: UnsafeMutablePointer<CUnsignedChar>,length: Int) -> String { let hash = NSMutableString() for i in 0..<length { hash.appendFormat("%02x",result[i]) } return String(hash) } }

(3)测试样例

let str = "welcome to hangge.com"let key = "67FG"let hmacStr = str.hmac(.SHA1,key: key)let pwd = str.d5print("原始字符串:\(str)")print("key:\(key)")print("HMAC运算结果:\(hmacStr)")print("md5运算结果:\(pwd)")/**** 输出 ****** 原始字符串:welcome to hangge.com key:67FG HMAC运算结果:79a5f5b138b5646289a9648de035c80e9c5c14c7 md5运算结果:0d5ca19da68a37af5900c8ebf5356c6e *****/


文/Peter__Pan(简书作者) 原文链接:http://www.jianshu.com/p/738f681f1f47 著作权归作者所有,转载请联系作者获得授权,并标注“简书作者”。 总结

以上是内存溢出为你收集整理的Swift - 常用加密/解密全部内容,希望文章能够帮你解决Swift - 常用 - 加密/解密所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1067714.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-26
下一篇 2022-05-26

发表评论

登录后才能评论

评论列表(0条)

保存