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命令---vi编辑器快速定位行数
    Linux如何查找大文件或目录总结
    Xargs用法详解(自创)
    linux如何模糊查找一个文件
    HashMap在什么场景下会由哪些内部方法导致线程不安全,至少给出一种场景
    索引失效(全面总结)
    异常处理(Exception Handling)
    JAVA异常及其异常处理方式
    Activity嵌套多个Fragment实现横竖屏切换
    iOS KVC(Key-Value Coding)
  • 原文地址:https://www.cnblogs.com/FranZhou/p/5086079.html
Copyright © 2011-2022 走看看