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)