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

      

  • 相关阅读:
    How to debug with IntelliJ IDEA + Grails 2.3.x (转)
    Lucene教程具体解释
    html中滚动栏的样式
    centos下ant的安装
    qt的资源替换搜索QDir具体解释
    strtok和strtok_r
    文件读写、游标
    Rational Rose 2007 &amp;Rational Rose 2003 下载及破解方法和汉化文件下载
    算法6-5:哈希表应用之集合
    javaEE jdbc编程步骤
  • 原文地址:https://www.cnblogs.com/FranZhou/p/5086079.html
Copyright © 2020-2023  润新知