zoukankan      html  css  js  c++  java
  • Swift sha1 md5加密

    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)
        }
    }
    

      

  • 相关阅读:
    linux下文件结束符
    【转】跟我学Kafka之NIO通信机制
    【转】 详解Kafka生产者Producer配置
    【转】项目延期的⑦大因素
    (转)EOSIO开发(三)钱包、账户与账户权限之概念篇
    CentOS里alias命令
    (转)EOSIO开发(一)使用Docker构建本地环境
    Marathon自动扩缩容(marathon-lb-autoscale)
    (转)Springboot日志配置(超详细,推荐)
    Spring Boot下的lombok安装以及使用简介
  • 原文地址:https://www.cnblogs.com/FranZhou/p/5086079.html
Copyright © 2011-2022 走看看