AES/RSA/MD2/MD5/SHA1/SHA128/SHA384/SHA512 in Swift
可以参考github: https://github.com/adow/SecrecySwift
https://github.com/SwiftP2P/SwiftSSL
swift实现sha1加密算法,需要现在beidge-header文件中添加下述语句
// sha1 #import <CommonCrypto/CommonHMAC.h>
sha1:
import UIKit extension String{ func sha1() -> String{ let data = self.dataUsingEncoding(NSUTF8StringEncoding, allowLossyConversion: true)! var digest = [UInt8](count:Int(CC_SHA1_DIGEST_LENGTH),repeatedValue:0) CC_SHA1(data.bytes, CC_LONG(data.length), &digest) let output = NSMutableString(capacity: Int(CC_SHA1_DIGEST_LENGTH)) for byte in digest{ output.appendFormat("%02x", byte) } return output as String } }
MD5:(对比一下sha1的方法,改动不大,其他几种也应该差不多)
extension String{ func md5() -> String{ let data = self.dataUsingEncoding(NSUTF8StringEncoding, allowLossyConversion: true)! var digest = [UInt8](count:Int(CC_MD5_DIGEST_LENGTH),repeatedValue:0) CC_MD5(data.bytes, CC_LONG(data.length), &digest) let output = NSMutableString(capacity: Int(CC_MD5_DIGEST_LENGTH)) for byte in digest{ output.appendFormat("%02x", byte) } return output as String } }
hmac加密:
// MARK: - HMAC加密 需要秘钥 enum 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 { 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!, strLen, 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) } }